Spring Boot 4 快速入门
1. Spring Boot 概述
1.1 什么是 Spring Boot
Spring Boot 是 Spring 生态系统的核心项目,它简化了 Spring 应用的初始搭建和开发过程,通过约定优于配置的理念,让开发者能够快速创建独立的、生产级别的 Spring 应用。
1.2 Spring Boot 4 新特性
| 特性 | 说明 |
|---|---|
| Java 17+ 基线 | 最低要求 Java 17 |
| 虚拟线程支持 | 默认启用虚拟线程 |
| HTTP Service Clients | 声明式 HTTP 客户端 |
| GraalVM 原生镜像 | 改进的原生编译支持 |
| 可观测性增强 | Micrometer Tracing 集成 |
| Spring Security 7 | 安全框架升级 |
1.3 Spring Boot vs Spring
| 对比项 | Spring | Spring Boot |
|---|---|---|
| 配置方式 | XML/注解 | 自动配置 |
| 依赖管理 | 手动管理 | Starter 依赖 |
| 内嵌服务器 | 需要外部部署 | 内嵌 Tomcat/Jetty |
| 开发效率 | 较低 | 较高 |
| 学习曲线 | 较陡 | 较平缓 |
2. 快速开始
2.1 创建项目
使用 Spring Initializr 创建项目:
bash
curl https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=4.0.0 \
-d baseDir=myapp \
-d groupId=com.example \
-d artifactId=myapp \
-d name=myapp \
-d packageName=com.example.myapp \
-d javaVersion=21 \
-d dependencies=web,data-jpa,h2 \
-o myapp.zip2.2 项目结构
myapp/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/myapp/
│ │ │ ├── MyappApplication.java
│ │ │ ├── controller/
│ │ │ ├── service/
│ │ │ ├── repository/
│ │ │ └── entity/
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── static/
│ │ └── templates/
│ └── test/
│ └── java/
│ └── com/example/myapp/
├── pom.xml
└── README.md2.3 主启动类
java
@SpringBootApplication
public class MyappApplication {
public static void main(String[] args) {
SpringApplication.run(MyappApplication.class, args);
}
}2.4 pom.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.0</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myapp</name>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>3. 配置文件
3.1 application.yml
yaml
server:
port: 8080
servlet:
context-path: /api
spring:
application:
name: myapp
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
format_sql: true
h2:
console:
enabled: true
path: /h2-console
logging:
level:
root: INFO
com.example: DEBUG
org.hibernate.SQL: DEBUG3.2 多环境配置
yaml
# application.yml
spring:
profiles:
active: dev
---
# application-dev.yml
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:devdb
username: sa
password:
logging:
level:
com.example: DEBUG
---
# application-prod.yml
server:
port: 80
spring:
datasource:
url: jdbc:mysql://localhost:3306/proddb
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
logging:
level:
com.example: INFO3.3 配置类
java
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;
private Map<String, String> features = new HashMap<>();
// getters and setters
}yaml
app:
name: My Application
version: 1.0.0
features:
feature-a: enabled
feature-b: disabled4. Starter 依赖
4.1 常用 Starter
| Starter | 说明 |
|---|---|
| spring-boot-starter-web | Web 开发 |
| spring-boot-starter-data-jpa | JPA 数据访问 |
| spring-boot-starter-data-redis | Redis 数据访问 |
| spring-boot-starter-security | 安全框架 |
| spring-boot-starter-validation | 数据验证 |
| spring-boot-starter-actuator | 应用监控 |
| spring-boot-starter-test | 测试框架 |
| spring-boot-starter-aop | AOP 支持 |
| spring-boot-starter-mail | 邮件发送 |
| spring-boot-starter-cache | 缓存支持 |
4.2 自定义 Starter
java
@Configuration
@ConditionalOnClass(ExampleService.class)
@EnableConfigurationProperties(ExampleProperties.class)
public class ExampleAutoConfiguration {
private final ExampleProperties properties;
public ExampleAutoConfiguration(ExampleProperties properties) {
this.properties = properties;
}
@Bean
@ConditionalOnMissingBean
public ExampleService exampleService() {
return new ExampleService(properties);
}
}properties
# META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.example.ExampleAutoConfiguration5. 自动配置原理
5.1 @SpringBootApplication
java
@SpringBootApplication
public class MyappApplication {
public static void main(String[] args) {
SpringApplication.run(MyappApplication.class, args);
}
}
// 等价于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class MyappApplication {
public static void main(String[] args) {
SpringApplication.run(MyappApplication.class, args);
}
}5.2 条件注解
| 注解 | 说明 |
|---|---|
| @ConditionalOnClass | 类路径存在指定类 |
| @ConditionalOnMissingClass | 类路径不存在指定类 |
| @ConditionalOnBean | 容器中存在指定 Bean |
| @ConditionalOnMissingBean | 容器中不存在指定 Bean |
| @ConditionalOnProperty | 配置属性满足条件 |
| @ConditionalOnWebApplication | Web 应用环境 |
| @ConditionalOnExpression | SpEL 表达式为 true |
5.3 自定义条件
java
@Configuration
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public class FeatureConfiguration {
@Bean
public FeatureService featureService() {
return new FeatureService();
}
}6. 开发工具
6.1 spring-boot-devtools
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>yaml
spring:
devtools:
restart:
enabled: true
additional-paths: src/main/java
exclude: static/**,templates/**
livereload:
enabled: true
port: 357296.2 热部署配置
yaml
spring:
thymeleaf:
cache: false
freemarker:
cache: false
groovy:
template:
cache: false7. 日志配置
7.1 日志级别
yaml
logging:
level:
root: INFO
com.example: DEBUG
org.springframework.web: DEBUG
org.hibernate.SQL: DEBUG
org.hibernate.type.descriptor.sql.BasicBinder: TRACE7.2 日志文件
yaml
logging:
file:
name: logs/application.log
max-size: 10MB
max-history: 30
pattern:
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
console: "%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %msg%n"7.3 使用日志
java
@Slf4j
@Service
public class UserService {
public User findById(Long id) {
log.debug("Finding user by id: {}", id);
User user = userRepository.findById(id).orElse(null);
log.debug("Found user: {}", user);
return user;
}
}8. Actuator 监控
8.1 添加依赖
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>8.2 配置端点
yaml
management:
endpoints:
web:
exposure:
include: health,info,metrics,env,loggers
base-path: /actuator
endpoint:
health:
show-details: always
loggers:
enabled: true
info:
env:
enabled: true8.3 常用端点
| 端点 | 说明 |
|---|---|
| /actuator/health | 健康检查 |
| /actuator/info | 应用信息 |
| /actuator/metrics | 指标信息 |
| /actuator/env | 环境变量 |
| /actuator/loggers | 日志配置 |
| /actuator/beans | Bean 列表 |
| /actuator/mappings | URL 映射 |
8.4 自定义健康检查
java
@Component
public class CustomHealthIndicator implements HealthIndicator {
@Override
public Health health() {
int errorCode = check();
if (errorCode != 0) {
return Health.down()
.withDetail("Error Code", errorCode)
.build();
}
return Health.up().build();
}
private int check() {
return 0;
}
}9. 虚拟线程
9.1 启用虚拟线程
yaml
spring:
threads:
virtual:
enabled: true9.2 Tomcat 虚拟线程
java
@Configuration
public class VirtualThreadConfig {
@Bean
public TomcatProtocolHandlerCustomizer<?> virtualThreadExecutor() {
return protocolHandler -> {
protocolHandler.setExecutor(
Executors.newVirtualThreadPerTaskExecutor()
);
};
}
}9.3 异步请求虚拟线程
java
@Configuration
public class AsyncConfig {
@Bean
public AsyncTaskExecutor applicationTaskExecutor() {
return new TaskExecutorAdapter(
Executors.newVirtualThreadPerTaskExecutor()
);
}
}10. 命令行启动
10.1 打包运行
bash
# 打包
mvn clean package
# 运行
java -jar target/myapp-0.0.1-SNAPSHOT.jar
# 指定配置
java -jar target/myapp-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# 指定端口
java -jar target/myapp-0.0.1-SNAPSHOT.jar --server.port=909010.2 Maven 运行
bash
mvn spring-boot:run
mvn spring-boot:run -Dspring-boot.run.profiles=dev10.3 Gradle 运行
bash
gradle bootRun
gradle bootRun --args='--spring.profiles.active=dev'11. 小结
本章学习了 Spring Boot 4 的基础知识:
| 内容 | 要点 |
|---|---|
| 项目创建 | Spring Initializr、项目结构 |
| 配置文件 | application.yml、多环境配置 |
| Starter | 常用 Starter、自定义 Starter |
| 自动配置 | 条件注解、配置原理 |
| 开发工具 | devtools、热部署 |
| 日志配置 | 日志级别、日志文件 |
| Actuator | 健康检查、指标监控 |
| 虚拟线程 | 启用配置、线程池 |
下一章将学习 Spring Boot 4 的自动配置原理。