在实际的SpringBoot项目开发中,我们通常需要准备开发、测试、生产等多套环境。每套环境的数据库、Redis、日志级别等配置往往不同。本文将详细介绍SpringBoot如何实现多环境配置管理。
1. 配置文件命名规则
SpringBoot默认的配置文件是 application.properties 或 application.yml。多环境配置文件的命名需要遵循 application-{profile}.properties/yml 的格式。其中 {profile} 是你自定义的环境标识。
例如:
application-dev.yml (开发环境)
application-test.yml (测试环境)
application-prod.yml (生产环境)
2. 配置内容示例
假设我们有一个简单的配置项需要区分环境,可以这样组织文件:
application.yml (主配置文件,配置通用项和激活的环境)
spring:
profiles:
active: dev # 默认激活开发环境
server:
port: 8080 # 所有环境共用的端口,可在环境配置中覆盖
application-dev.yml (开发环境)
# 数据库配置
db:
url: jdbc:mysql://localhost:3306/dev_db?useSSL=false
username: dev_user
password: dev_pass
# Redis配置
redis:
host: 127.0.0.1
port: 6379
# 日志级别
logging:
level:
root: debug
application-prod.yml (生产环境)
db:
url: jdbc:mysql://prod-db-host:3306/prod_db?useSSL=true
username: ${PROD_DB_USERNAME} # 建议使用环境变量,更安全
password: ${PROD_DB_PASSWORD}
redis:
host: prod-redis-host
port: 6379
logging:
level:
root: warn
3. 激活特定环境
有多种方式可以指定使用哪个环境的配置。
方式一:主配置文件中指定(如上例)
在 application.yml 中设置 spring.profiles.active。
方式二:命令行启动参数
java -jar myapp.jar --spring.profiles.active=test
方式三:系统环境变量
设置一个名为 SPRING_PROFILES_ACTIVE 的系统环境变量,值为 prod。
方式四:JVM参数
java -Dspring.profiles.active=prod -jar myapp.jar
4. 在代码中读取配置
你可以使用 @Value 注解或 @ConfigurationProperties 来绑定配置。
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyConfigComponent {
@Value("${db.url}")
private String dbUrl;
@Value("${redis.host}")
private String redisHost;
// 还可以注入当前激活的环境名
@Value("${spring.profiles.active}")
private String activeProfile;
// ... getter & setter
}
5. 配置文件的优先级与外部化
SpringBoot支持将配置文件放在项目外,这对于生产环境部署和运维非常有用。配置文件加载的优先级(从高到低)如下:
- 当前项目根目录下的
/config 子目录
- 当前项目根目录
- 类路径下的
/config 包
- 类路径根目录
实战技巧:
在部署生产包时,可以将 application-prod.yml 放在与JAR包同级的 /config 目录下。这样既能保证生产配置的安全(不打包进JAR),又方便运维人员修改,无需重新构建项目。
# 项目部署目录结构示例
.
├── myapp.jar
└── config
└── application-prod.yml # 外部配置文件,优先级最高
6. 高级特性:Profile-specific配置与分组
从Spring Boot 2.4开始,配置支持更灵活的 spring.config.activate.on-profile 和分组功能。
# application.yml
spring:
profiles:
active: dev,cloud # 激活dev和cloud两个profile组
config:
activate:
on-profile: dev,cloud # 此部分配置仅对dev和cloud生效
server:
port: 8081
多环境配置是项目迈向标准化DevOps流程的基础,合理的配置管理能极大提升开发、测试与部署的效率与安全性。