本文讲解 Spring Boot 配置管理,包括 profile、外部化配置、Jasypt 加密、Nacos 配置中心和动态刷新。
正文:
1. 配置文件优先级
命令行 > 环境变量 > application-{profile}.yml > application.yml。
2. 多环境配置
yaml
复制
下载
# application.yml spring: profiles: active: dev --- spring: config: activate: on-profile: dev server: port: 8080 --- spring: config: activate: on-profile: prod server: port: 80
或分文件:application-dev.yml、application-prod.yml。
3. 外部化配置
bash
复制
下载
java -jar app.jar --spring.config.location=/etc/app/ java -jar app.jar --server.port=9090
环境变量:
bash
复制
下载
export SPRING_DATASOURCE_URL=jdbc:mysql://...
4. @ConfigurationProperties
java
复制
下载
@ConfigurationProperties(prefix = "app") @Component public class AppProperties { private String name; private int timeout; private List<String> hosts; // getter/setter }配合@EnableConfigurationProperties或@ConfigurationPropertiesScan。
5. 敏感信息加密 Jasypt
xml
复制
下载
运行
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>
加密:
bash
复制
下载
java -cp jasypt.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \ input="mypassword" password="masterkey" algorithm=PBEWithMD5AndDES
配置:
yaml
复制
下载
spring: datasource: password: ENC(密文) jasypt: encryptor: password: ${JASYPT_PASSWORD}6. Nacos 配置中心
xml
复制
下载
运行
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
yaml
复制
下载
spring: config: import: nacos:app.yaml cloud: nacos: config: server-addr: localhost:8848 file-extension: yaml
7. 动态刷新
java
复制
下载
@RefreshScope @Component public class DynamicConfig { @Value("${app.timeout}") private int timeout; }Nacos 修改配置后自动刷新。
8. 配置监听
java
复制
下载
@NacosConfigListener(dataId = "app.yaml") public void onChange(String config) { // 处理变更 }9. 常见坑
profile 未激活。
配置优先级混淆。
密钥硬编码。
动态刷新与单例 Bean 状态冲突。
10. 总结
配置管理要区分环境、保护敏感信息、支持动态刷新。本地用 profile + Jasypt,分布式用 Nacos/Apollo。