Spring Boot 是 Spring 的脚手架,简化 Spring 应用的创建和开发。
- 自动配置
- 起步依赖(Starter)
- 内嵌服务器
- 无需 XML 配置
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
// @SpringBootApplication 是组合注解
@SpringBootConfiguration // 配置类
@EnableAutoConfiguration // 开启自动配置
@ComponentScan // 组件扫描
public @interface SpringBootApplication {
}
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}
| 注解 | 说明 |
|---|
| @ConditionalOnClass | 类路径存在指定类 |
| @ConditionalOnMissingClass | 类路径不存在指定类 |
| @ConditionalOnBean | 容器中存在指定 Bean |
| @ConditionalOnMissingBean | 容器中不存在指定 Bean |
| @ConditionalOnProperty | 配置属性满足条件 |
| @ConditionalOnWebApplication | Web 应用环境 |
@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public DataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().build();
}
}
| 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-test | 测试 |
my-starter/
├── src/main/java/
│ └── com/example/
│ ├── MyAutoConfiguration.java
│ └── MyProperties.java
└── src/main/resources/
└── META-INF/
└── spring.factories
// 配置属性
@ConfigurationProperties(prefix = "my.config")
public class MyProperties {
private String name = "default";
// getter/setter
}
// 自动配置类
@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConditionalOnClass(MyService.class)
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MyService myService(MyProperties properties) {
return new MyService(properties.getName());
}
}
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration
| 类型 | 优先级 |
|---|
| application.properties | 高 |
| application.yml | 低 |
# application.yml
spring:
profiles:
active: dev
---
# application-dev.yml
server:
port: 8080
---
# application-prod.yml
server:
port: 80
- 命令行参数
- JNDI 属性
- Java 系统属性
- 操作系统环境变量
- application-{profile}.properties
- application.properties
- @PropertySource
- 默认属性
@ConfigurationProperties(prefix = "app")
@Component
public class AppProperties {
private String name;
private int port;
private List<String> servers;
private Map<String, String> config;
// getter/setter
}
app:
name: myapp
port: 8080
servers:
- server1
- server2
config:
key1: value1
key2: value2
@Configuration // 配置类
@Bean // 定义 Bean
@Value("${app.name}") // 注入配置值
@ConfigurationProperties // 配置属性绑定
@PropertySource // 加载配置文件
@Profile("dev") // 指定环境生效
@RestController // REST 控制器
@RequestMapping // 请求映射
@GetMapping // GET 请求
@PostMapping // POST 请求
@RequestBody // 请求体
@ResponseBody // 响应体
@PathVariable // 路径变量
@RequestParam // 请求参数
@Valid // 开启校验
@NotNull // 非空
@NotBlank // 非空字符串
@Size(min=1, max=10) // 长度范围
@Min(0) // 最小值
@Max(100) // 最大值
@Email // 邮箱格式
@Pattern(regexp="") // 正则匹配
// ApplicationContextInitializer
public class MyInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext ctx) {
System.out.println("初始化 Context");
}
}
// ApplicationRunner
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
System.out.println("应用启动完成");
}
}
// CommandLineRunner
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) {
System.out.println("命令行参数: " + Arrays.toString(args));
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
| 端点 | 说明 |
|---|
| /actuator/health | 健康检查 |
| /actuator/info | 应用信息 |
| /actuator/metrics | 指标信息 |
| /actuator/env | 环境变量 |
| /actuator/beans | Bean 列表 |
| /actuator/mappings | 请求映射 |