前几天,我上线一个新服务,结果遇到三个问题:
- 1. 明明在 application.yml 改了端口,重启后访问还是旧端口;
- 2. 数据库密码写在文件里,总感觉不安全;
- 3. 开发环境和生产环境的配置切换老是出错。
摸索了一圈,发现问题都出在配置没搞清楚。这里给大家总结一套可落地的方法。
一、SpringBoot 的两个核心配置文件
Spring Boot 有两种配置文件格式:
1. properties格式(简单直接)
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
logging.level.com.example=debug
2. yml格式(推荐,更清晰)
server:
port: 8080
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
logging:
level:
com.example: debug
org.springframework: info
file:
name: app.log
Tip:两个文件功能一样,但 yml 更直观,层级清晰。
二、配置文件放哪里?
Spring Boot 会按优先级顺序查找配置文件,先找到的生效:
- 1. 项目根目录 /config
- 2. 项目根目录
- 3. classpath 下 /config
- 4. classpath 根目录(最常用)
项目结构示例:
src/main/resources/
├── application.yml ← 最常用
└── config/
└── application.yml ← 优先级更高
三、代码里怎么读取配置?
方法1:@Value(单值)
@Value("${server.port}")
private int port;
方法2:@ConfigurationProperties(一组配置)
myapp:
name: 我的应用
version: 1.0.0
user:
default-role: user
allow-register: true
@Component
@ConfigurationProperties(prefix = "myapp")
@Data
public class AppConfig {
private String name;
private String version;
private User user;
@Data
public static class User {
private String defaultRole;
private boolean allowRegister;
}
}
四、多环境配置(开发 / 测试 / 生产)
前几天的问题,99% 都是由于环境没分清。
Spring Boot 提供了多环境配置,推荐做法:
resources/
├── application.yml # 通用配置
├── application-dev.yml # 开发环境
├── application-test.yml # 测试环境
└── application-prod.yml # 生产环境
切换环境方式:
- 1. 命令行(最常用)
java -jar app.jar --spring.profiles.active=prod
- 2. IDEA VM options
-Dspring.profiles.active=dev
- 3. 系统环境变量
export SPRING_PROFILES_ACTIVE=prod
注意:生产环境的数据库密码不要写死在文件里,用环境变量最安全:
spring.datasource.password=${DB_PASSWORD}
五、配置优先级(必定要记住!)
- 1. 命令行参数(最高)
- 2. 系统环境变量
- 3. 配置文件
- 4. 代码默认值(最低)
所以你改了 application.yml 却没生效,很可能被命令行或环境变量覆盖了。
六、快速上手模板
server:
port: 8080
servlet:
context-path: /api
spring:
application:
name: 我的应用
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: ${DB_PASSWORD:123456}
driver-class-name: com.mysql.cj.jdbc.Driver
启动命令示例:
export DB_PASSWORD=yourpassword
java -jar app.jar --spring.profiles.active=prod
总结
- • 环境分离:开发 / 测试 / 生产独立配置
- • 读取配置:@Value 或 @ConfigurationProperties
- • 密码安全:不要写死,使用环境变量
- • 优先级:命令行 > 环境变量 > 配置文件 > 代码默认值
来源:
https://mp.weixin.qq.com/s/j9sHLU2cmcl7gbPAlY0Hkg
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
