<前文回顾>
<今日更新>
一、Spring Boot 的自动配置:从“手忙脚乱”到“躺平开发”
Spring Boot 的自动配置[1],说白了就是“躺平开发”的代名词。它用“约定优于配置”的设计理念,让开发者从繁琐的配置中解脱出来,专注于业务逻辑。Spring Boot 的自动配置,就像“懒人神器”,开发者只需要引入依赖,Spring Boot 就会自动配置好一切。
1. 约定优于配置:Spring Boot 的“懒人哲学”
Spring Boot 的“约定优于配置”理念,就是通过一系列默认配置,减少开发者的手动配置。比如,Spring Boot 默认使用 application.properties 或 application.yml 作为配置文件,默认的服务器端口是 8080,默认的数据库连接池是 HikariCP[2]。
Yml Code |
# application.yml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: root |
2. 自动配置的实现:Spring Boot 的“黑科技”
Spring Boot 的自动配置是通过 @EnableAutoConfiguration 注解实现的。这个注解会扫描类路径下的依赖,自动配置相应的 Bean。
Java Code |
@EnableAutoConfiguration @SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } |
二、Spring Boot 的默认配置:从“躺平”到“调校”
Spring Boot 的默认配置虽然“省心”,但有时候也得“调校”一下。Spring Boot 的默认配置涵盖了服务器、数据库、日志、缓存等方方面面。
1. 服务器配置:默认端口 8080
Spring Boot 默认使用 Tomcat 作为内嵌服务器,端口号是 8080。如果不想用 8080,可以在 application.yml 中修改。
2. 数据库配置:默认连接池 HikariCP
Spring Boot 默认使用 HikariCP 作为数据库连接池,连接池的大小、超时时间等都有默认值。如果不想用 HikariCP,可以在 application.yml 中修改。
Yml Code |
spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: root hikari: maximum-pool-size: 10 idle-timeout: 30000 |
3. 日志配置:默认使用 Logback
Spring Boot 默认使用 Logback 作为日志框架,日志级别、输出格式等都有默认值。如果不想用 Logback,可以在 application.yml 中修改。
Yml Code |
logging: level: root: INFO com.example: DEBUG pattern: file: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n" |
4. 缓存配置:默认使用 SimpleCache
Spring Boot 默认使用 SimpleCache 作为缓存实现,缓存的大小、过期时间等都有默认值。如果不想用 SimpleCache,可以在 application.yml 中修改。
Yml Code |
spring: cache: type: simple cache-names: myCache |
三、Spring Boot 的引包方式:从“手动”到“自动”
Spring Boot 的引包方式,说白了就是“自动依赖管理”。Spring Boot 通过 spring-boot-starter 系列依赖,简化了依赖管理。
1. spring-boot-starter-web:Web 开发的“全家桶”
spring-boot-starter-web 是 Web 开发的“全家桶”,里头装着 Spring MVC、Tomcat、Jackson 啥的。
XML Code |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
2. spring-boot-starter-data-jpa:数据访问的“利器”
spring-boot-starter-data-jpa 是数据访问的“利器”,里头装着 Spring Data JPA、Hibernate 啥的。
XML Code |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> |
3. spring-boot-starter-test:测试的“工具箱”
spring-boot-starter-test 是测试的“工具箱”,里头装着 JUnit、Mockito、Spring Test 啥的。
XML Code |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> |
四、Spring Boot 的文件结构:从“杂乱无章”到“井井有条”
Spring Boot 的文件结构,说白了就是“井井有条”。Spring Boot 通过一系列约定,让项目的文件结构更加清晰。
1. src/main/java:Java 代码的“大本营”
src/main/java 是 Java 代码的“大本营”,里头装着项目的 Java 代码。
Package List |
src/main/java └── com └── example └── MyApp.java |
2. src/main/resources:配置文件的“仓库”
src/main/resources 是配置文件的“仓库”,里头装着 application.yml、static、templates 啥的。
Package List |
src/main/resources ├── application.yml ├── static └── templates |
3. src/test/java:测试代码的“练兵场”
src/test/java 是测试代码的“练兵场”,里头装着项目的测试代码。
Package List |
src/test/java └── com └── example └── MyAppTest.java |
五、Spring Boot 的配置文件读取:从“硬编码”到“灵活配置”
Spring Boot 的配置文件读取,说白了就是“灵活配置”。Spring Boot 通过 @ConfigurationProperties 注解,把配置文件中的属性绑定到 Java 对象上。
1. @ConfigurationProperties:配置属性的“绑定器”
@ConfigurationProperties 是配置属性的“绑定器”,它能把配置文件中的属性绑定到 Java 对象上。
Java Code |
@ConfigurationProperties(prefix = "myapp") public class MyAppProperties { private String name; private int version;
// getters and setters } |
2. @Value:单个属性的“注入器”
@Value 是单个属性的“注入器”,它能把配置文件中的单个属性注入到 Java 字段上。
Java Code |
@Component public class MyComponent { @Value("${myapp.name}") private String name; } |
六、Spring Boot 的“骚操作”
1. 多环境配置:从“一刀切”到“灵活切换”
Spring Boot 支持多环境配置,能用 application-{profile}.yml 来区分不同环境的配置。
Yml Code |
# application-dev.yml server: port: 8080 # application-prod.yml server: port: 9090 |
2. 自定义 Starter:从“拿来主义”到“自力更生”
Spring Boot 支持自定义 Starter,能把自己的配置打包成 Starter,方便其他项目使用。
Java Code |
@Configuration public class MyStarterAutoConfiguration { @Bean public MyService myService() { return new MyService(); } } |
3. 条件化配置:从“一刀切”到“按需配置”
Spring Boot 支持条件化配置,能用 @ConditionalOnProperty、@ConditionalOnClass 等注解,按需配置 Bean。
Java Code |
@Configuration @ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true") public class MyFeatureConfiguration { @Bean public MyFeature myFeature() { return new MyFeature(); } } |
专有名词解释
- 自动配置:Spring Boot 的核心特性之一,通过默认配置减少开发者的手动配置。
- HikariCP:一个高性能的 JDBC 连接池,Spring Boot 默认使用它作为数据库连接池。
- Logback:一个高性能的日志框架,Spring Boot 默认使用它作为日志实现。