0%

尚硅谷尚庭公寓-03

ThreadLocal

介绍

ThreadLocal是JDK提供的一个线程内部的数据存储工具类,它提供了一些方法,用于在当前线程中存储数据,并且每个线程都可以独立地访问自己的数据。

阅读全文 »

课程:黑马设计模式精讲

1 设计模式概述

1.1 软件设计模式的产生背景

“设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。

1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。

1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)著称。

阅读全文 »

尚硅谷尚庭公寓-02

MinIo实现图片上传功能

  • 配置Minio Client

    • 引入Minio Maven依赖

      common模块pom.xml文件增加如下内容:

      1
      2
      3
      4
      <dependency>
      <groupId>io.minio</groupId>
      <artifactId>minio</artifactId>
      </dependency>
    • 配置Minio相关参数

      application.yml中配置Minio的endpointaccessKeysecretKeybucketName等参数

      1
      2
      3
      4
      5
      minio:
      endpoint: http://<hostname>:<port>
      access-key: <access-key>
      secret-key: <secret-key>
      bucket-name: <bucket-name>

      注意:上述<hostname><port>等信息需根据实际情况进行修改。

    • common模块中创建com.atguigu.lease.common.minio.MinioProperties,内容如下

      1
      2
      3
      4
      5
      6
      7
      8
      @ConfigurationProperties(prefix = "minio")
      @Data
      public class MinioProperties {
      private String endpoint;
      private String accessKey;
      private String secretKey;
      private String bucketName;
      }
    • common模块中创建com.atguigu.lease.common.minio.MinioConfiguration,内容如下

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      @Configuration
      @EnableConfigurationProperties(MinioProperties.class)
      public class MinioConfiguration {

      @Autowired
      private MinioProperties properties;

      @Bean
      public MinioClient minioClient() {
      return MinioClient.builder().endpoint(properties.getEndpoint()).credentials(properties.getAccessKey(), properties.getSecretKey()).build();
      }
      }
      阅读全文 »

Spring 注解

和 DI 相关的注解

@Autowired

可以在构造函数、Setter 方法或字段注入中使用 @Autowired 注解,Spring 会解析并注入依赖。
构造函数注入:

1
2
3
4
5
6
7
8
class Car {
Engine engine;

@Autowired
Car(Engine engine) {
this.engine = engine;
}
}

Setter 注入:

1
2
3
4
5
6
7
8
class Car {
Engine engine;

@Autowired
void setEngine(Engine engine) {
this.engine = engine;
}
}

字段注入:

1
2
3
4
class Car {
@Autowired
Engine engine;
}

@Autowired 有一个名为 required 的 boolean 参数,默认值为 true。当 Spring 找不到合适的 Bean 进行注入时,它会控制 Spring 的行为。当值为 true 时,会抛出异常,反之则不会。
注意,如果使用构造函数注入,所有构造函数参数都是 必须的 。
从 Spring 4.3 开始,除非声明了至少两个构造函数,否则不需要用 @Autowired 明确注解构造函数。

阅读全文 »

Knife4j快速入门

1 概述

Knife4j是一个用于生成和展示API文档的工具,同时它还提供了在线调试的功能,下图是其工作界面。

了解

  • Knife4j有多个版本,最新版的Knife4j基于开源项目springdoc-openapi,这个开源项目的核心功能就是根据SpringBoot项目中的代码自动生成符合OpenAPI规范的接口信息。
  • OpenAPI规范定义接口文档的内容和格式,其前身是Swagger规范。
    阅读全文 »

Redis快速入门

1 Redis概述

  1. Reids定义

    Redis(Remote Dictionary Server)是一个基于内存的键值对存储系统,常用作缓存服务。由于Reids将数据都保存在内存中,因此其读写性能十分惊人,同时,为保证数据的可靠性,Redis会将数据备份到硬盘上,用于故障发生时的数据恢复。

  2. Redis特点

    • 高性能:Redis主要将数据存储在内存中,因此读写速度非常快,适合对速度有较高要求的场景。
    • 支持多种数据结构:Redis中键值对的值(Value)支持多种数据结构,如字符串、哈希表、列表、集合等,这使得它可以应用于多种不同的场景。
    • 持久化:Redis可以通过定期快照或者实时记录写操作日志的方式将内存中的数据持久化到硬盘,确保数据在重启后不会丢失。
    • 灵活的数据过期策略:可以为每个键设置过期时间,一旦过期,Redis会自动删除。
  3. Redis应用场景

    Redis最为常见的一个应用场景就是用作缓存,缓存可以显著提升访问速度,降低数据库压力。

    阅读全文 »

MinIO快速入门

1 MinIO核心概念

下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。

  • 对象(Object)

    对象是实际的数据单元,例如我们上传的一个图片。

  • 存储桶(Bucket)

    存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。

  • 端点(Endpoint)

    端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如 http://192.168.10.101:9000

    注意:

9000 为MinIO的API的默认端口,前边配置的 9001 以为管理页面端口。

  • Access Key 和 Secret Key

    Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。

    Secret Key是与Access Key关联的密码,用于验证访问者的身份。

    阅读全文 »

MyBatis Plus快速入门

1、概述

MyBatis-Plus(简称 MP)是一个MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其突出的特性如下:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,提供了大量的通用的CRUD方法,因此可以省去大量手写sql的语句的工作。
  • 条件构造器:提供了强大的条件构造器,可以构造各种复杂的查询条件,以应对各种复杂查询。
  • 内置分页插件:配置好插件之后,写分页等同于普通 List 查询,无需关注分页逻辑。

下面通过一个简单案例快速熟悉MyBatis Plus的基本使用

阅读全文 »

为什么使用全局异常处理

在开发时,需要对可能有异常的Controller层方法增加try-catch逻辑,而使用Spring MVC提供的全局异常处理功能,可以将所有处理异常的逻辑集中起来,进而统一处理所有异常,可以使代码更容易维护。
具体用法如下,详细信息可参考官方文档

阅读全文 »