Skip to main content
Version: Next

多环境配置(Profile)

实际项目通常有开发(dev)、测试(test)、生产(prod)多套环境。Spring Boot 的 Profile 机制让不同环境使用不同配置,打包一次、随处运行。

配置文件命名规则​

application.yml # 公共配置 + 激活哪个环境
application-dev.yml # 开发环境
application-test.yml # 测试环境
application-prod.yml # 生产环境

命名格式固定为 application-{profile}.yml。

主配置文件激活环境​

# application.yml
spring:
profiles:
active: dev # 当前激活的环境

各环境差异化配置​

# application-dev.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_dev
username: root
password: root
logging:
level:
root: debug
# application-prod.yml
server:
port: 80
spring:
datasource:
url: jdbc:mysql://prod-db:3306/demo
username: ${DB_USER} # 引用环境变量,避免明文密码
password: ${DB_PASSWORD}
logging:
level:
root: warn

合并规则​

激活的环境配置覆盖公共配置中的同名项,未覆盖的部分仍使用公共配置:

最终生效配置 = application.yml + application-{active}.yml(同名项后者优先)

运行时切换环境​

# 命令行参数(优先级最高)
java -jar demo.jar --spring.profiles.active=prod

# 环境变量
export SPRING_PROFILES_ACTIVE=prod && java -jar demo.jar

代码中区分环境​

@Profile 按环境装配 Bean:

@Configuration
@Profile("dev") // 仅 dev 环境生效
public class DevConfig {
// 开发环境专用 Bean
}

判断当前环境:

@Autowired
private Environment env;

boolean isDev = Arrays.asList(env.getActiveProfiles()).contains("dev");
tip

生产环境的敏感信息(数据库密码、密钥)不要写死在 yml 中,用环境变量 ${DB_PASSWORD} 或配置中心管理。