Skip to Content

spring

文件结构

springboot-project .idea // 编辑器配置文件 .mvn // maven配置文件 src // 源码 main java com.example.myproject // 包名 *MySpringBootApplication.java* // 应用的入口类,包含 main 方法,用于启动 Spring Boot 应用 controller // 控制器类,处理用户的输入并返回响应 *MyController.java* service // 服务类,处理业务逻辑 *MyService.java* repository // 数据访问类,访问数据库控制数据 *MyRepository.java* entity // 实体类 *MyEntity.java* util // 工具类 constant // 常量接口类 config // 配置类,用于配置应用的行为 *MyConfig.java* exception // 异常处理类,用于捕获异常并处理 *GlobalExceptionHandler.java* vo // 数据传输类 resources // 包含应用的所有资源文件 static // 存放静态资源,如CSS、JavaScript和图片文件 templates // 存放Web应用的模板文件 *application.properties | application.yml* // 配置文件 test // 按照与src/main/java相似的包结构组织测试类 java com.example.myproject *MySpringBootApplicationTests.java* target // 打包输出目录 *.gitignore* // 定义 Git 版本控制系统应该忽略的文件和目录 *pom.xml* // Maven构建文件,用于定义项目的依赖、插件和其他构建配置

重要文件解析

MyApplication.java

组合注解

  • @SpringBootApplication: 这是一个组合注解,它包含了以下三个主要的注解
    • @Configuration:标记这个类作为应用的配置类,允许在上下文中注册额外的 Bean 或导入其他配置类
    • @EnableAutoConfiguration:让 Spring Boot 根据类路径中的 jar 包、类,为当前项目进行自动配置
    • @ComponentScan:告诉 Spring 扫描这个类所在的包及其子包中的注解组件(如 @Component, @Service, @Repository, @Controller 等)

应用启动入口

  • public static void main(String[] args):当运行 Spring Boot 应用时,JVM 调用这个 main 方法启动应用

启动 Spring 应用上下文

  • SpringApplication.run(MyApplication.class, args):初始化并启动整个Spring应用程序
ConfigurableApplicationContext org.springframework.boot.SpringApplication.run( Class<?> primarySource, // 告诉 SpringApplication 起始的配置类是哪一个 String... args // 从命令行传入的参数 )

功能

  1. 创建一个合适的 ApplicationContext 实例:当Spring Boot应用启动时,首先会创建一个ApplicationContext实例。这个实例是Spring框架的核心,用于管理应用中所有的bean。创建的实例类型取决于类路径上的配置和其它因素,例如,如果类路径上存在spring-boot-starter-web依赖,那么可能会创建一个AnnotationConfigServletWebServerApplicationContext实例,这是一个用于Web应用的上下文。

  2. 注册一个 CommandLinePropertySource:这一步是为了将命令行参数添加到Spring的Environment中。CommandLinePropertySource是一个特殊的PropertySource,它允许命令行参数被当作配置属性使用。这意味着你可以在命令行中设置属性值,这些值会被Spring应用读取并使用。

  3. 刷新 ApplicationContext,加载所有单例 beans:在ApplicationContext创建并配置好之后,会执行刷新操作。这个操作会触发Spring容器的初始化,包括加载所有的单例bean。单例bean是指那些在Spring容器中只被创建一次的bean,它们在第一次被请求时被创建,并在后续的请求中重复使用同一个实例。

  4. 执行任何 CommandLineRunner beans:在Spring容器刷新并加载所有单例bean之后,如果存在实现了CommandLineRunner接口的bean,它们将被执行。CommandLineRunner是一个函数式接口,它允许你在Spring容器启动并加载所有bean之后执行一些代码。这通常用于执行一些启动时的初始化任务,比如数据的预加载或者发送欢迎消息等。

pom.xml

项目基本信息

  • <groupId>:项目的组ID,它是一个标识符,用来区分不同的组织或项目组。在一些项目管理系统中,如Maven或Gradle,这个ID用来组织和管理项目,确保项目的唯一性
  • <artifactId>:项目ID,它是项目的唯一标识符,用来区分同一个组内的不同项目
  • <version>:项目版本号,它用来标识项目的不同版本,以便于管理和使用不同版本的项目
  • <name>:项目的显示名称
  • <description>:项目描述

父项目

  • <parent>:如果该项目依赖于其他项目,那么需要声明该项目是哪个项目的子项目
<!-- Spring Boot父项目,提供依赖管理和插件管理 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> </parent>

项目依赖

  • <dependencies>:声明项目需要用到其他的库或者框架
  • <dependency>:项目用到的具体依赖
<dependency> <groupId>com.mysql</groupId> <!-- 组织或项目的唯一标识符 --> <artifactId>mysql-connector-j</artifactId> <!-- mysql连接java的依赖--> <version>3.0.3</version> <!-- 依赖的版本 --> <scope>runtime</scope> <!-- 依赖的作用范围 --> </dependency>

构建配置

  • <build>:设置项目的构建参数,例如源代码目录、目标目录、测试目录等
  • <plugins>:声明项目需要的插件,例如编译插件、打包插件等
  • <plugin>:项目用到的具体插件
<plugin> <groupId>org.springframework.boot</groupId> <!-- 组织或项目的唯一标识符 --> <artifactId>spring-boot-maven-plugin</artifactId> <!-- Spring Boot的Maven插件,用于打包可执行的jar或war文件 --> <configuration> <!-- plugin的配置部分 --> <excludes> <!-- 排除配置容器 --> <exclude> <!-- 具体排除项 --> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <!-- 在构建最终的可执行jar包时,不要包含Lombok依赖 --> </exclude> </excludes> </configuration> </plugin>

application.yml

功能

  • 用于配置 Spring Boot 应用程序的文件。它允许开发者为应用程序的不同方面提供特定的配置

语法

  • 大小写敏感
  • 数值前必须有空格,作为分隔符
  • 使用缩进表示层级关系,缩进时,不允许使用tab键,只能使用空格
  • 缩进的空格数不重要,只要相同层级的元素左侧对齐即可
  • #表示注解

基本属性配置

spring: application: name: my-application # 设置应用程序的名称 main: banner-mode: "off" # 关闭启动时的 Banner 显示 encoding: UTF-8 # 设置字符编码

服务器配置(server)

server: port: 8080 # 设置应用程序的端口号 servlet: context-path: /myapp # 设置应用程序的上下文路径(例如 http://localhost:8080/myapp)

数据库配置(datasource)

spring: datasource: url: jdbc:mysql://localhost:3306/mydb # 数据库连接 URL username: root # 数据库用户名 password: password # 数据库密码 driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动类 hikari: # 如果使用 HikariCP 作为连接池 maximum-pool-size: 10 # 最大连接池大小

日志配置

logging: level: org.springframework.web: DEBUG # 设置 Spring Web 包的日志级别 com.example.myapp: TRACE # 设置特定包或类的日志级别 file: name: app.log # 设置日志文件名 pattern: console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" # 设置控制台输出日志的格式

缓存配置

spring: cache: type: redis # 配置使用 Redis 作为缓存提供者 redis: host: localhost # Redis 服务器的主机 port: 6379 # Redis 服务器的端口 password: mypassword # Redis 连接密码

邮件服务配置

spring: mail: host: smtp.example.com # 邮件服务器地址 port: 587 # SMTP 端口 username: user@example.com # 邮箱用户名 password: password # 邮箱密码 protocol: smtp # 使用 SMTP 协议 tls: true # 启用 TLS 加密

Profile配置

  • 能够灵活地在不同环境下使用不同配置
  • 可以为不同的环境提供不同的 application-{profile}.yml 文件,并将配置项绑定到不同的类
  • application.yml 文件中添加 spring.profiles.active 属性可以指定默认使用的配置环境
# application-dev.yml 开发环境配置 spring: profiles: dev datasource: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_password # application-prod.yml 生产环境配置 spring: profiles: prod datasource: url: jdbc:mysql://localhost:3306/prod_db username: prod_user password: prod_password # application.yml 文件 spring: profiles: active: dev # 激活 dev 配置

加载顺序配置

基本原则
  • 如果多个位置都存在同名的配置文件,Spring Boot会按照如下优先级使用配置文件,同一配置按照优先级被覆盖
  1. 外部配置
    1. 命令行
    2. 环境变量
java -jar myapp.jar --server.port=9090 --spring.profiles.active=dev #命令行
  1. 内部配置
    1. 当前项目下的/config目录
    2. 当前项目的根目录
    3. classpath的/config目录
    4. classpath的根目录
  2. 默认配置

自定义配置

定义
  • 对象:键值对的集合
person: name: zhangsan # 行内写法 person: {name: zhangsan}
  • 数组:一组按次序排序的值
address: - beijing - shanghai # 行内写法 address: [beijing,shanghai]
  • 纯量:不可分割的值
s1: '123 \n 456' # 单引号不会被转义 s2: "123 \n 456" # 双引号会被转义
  • 引用:使用定义的参数
name: zhangsan person: name: ${name}
访问
  • 使用 @Value 访问配置
// 使用@Value //在Spring容器创建这个Bean的时候,会自动从配置文件中查找名为 `myapp.api.url` 的属性值,并将其注入到 `apiUrl` 这个字段中 @Value("${myapp.api.url}") private String apiUrl;
  • 使用 @ConfigurationProperties 访问配置
<!-- 使用@ConfigurationProperties,需要先配置依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@Data //lombok @Component //添加到组件 @ConfigurationProperties(prefix = "person")//绑定配置文件中配置类 //prefix属性指定了配置文件中属性的前缀,这样Spring Boot就可以知道应该从配置文件中读取哪些属性来填充这个类的字段 public class Person { private String name; private int age; private String[] address; }
Last updated on