在 Spring Boot 中配置多个环境(开发、测试、生产)通常用 配置文件分环境管理 + 启动参数切换 的方式来实现。下面一个完整的实践指南:
🔹 1. 使用多配置文件管理环境
Spring Boot 默认支持 application-{profile}.properties
或 application-{profile}.yml
文件。
常见方式是创建以下配置文件:
src/main/resources/
├── application.yml # 通用配置(所有环境共享)
├── application-dev.yml # 开发环境配置
├── application-test.yml # 测试环境配置
└── application-prod.yml # 生产环境配置
示例:
application.yml(通用配置)
spring:
application:
name: myapp
profiles:
active: dev # 默认激活 dev 环境(可以通过启动参数覆盖)
application-dev.yml(开发环境)
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/dev_db
username: dev_user
password: dev_pwd
application-prod.yml(生产环境)
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://prod-server:3306/prod_db
username: prod_user
password: prod_pwd
🔹 2. 启动时指定环境
方法 1:在 application.yml
设置
spring:
profiles:
active: dev # 或 test / prod
方法 2:命令行参数(推荐,灵活)
# 启动时指定 dev 环境
java -jar myapp.jar --spring.profiles.active=dev
# 启动时指定 prod 环境
java -jar myapp.jar --spring.profiles.active=prod
方法 3:环境变量
export SPRING_PROFILES_ACTIVE=prod
java -jar myapp.jar
🔹 3. 使用 Profile 注解(可选)
如果你需要在代码里针对不同环境执行逻辑,可以用 @Profile
注解:
@Service
@Profile("dev")
public class DevDataService implements DataService {
@Override
public String getData() {
return "开发环境数据";
}
}
@Service
@Profile("prod")
public class ProdDataService implements DataService {
@Override
public String getData() {
return "生产环境数据";
}
}
这样在 dev
环境只会加载 DevDataService
,而生产环境只会加载 ProdDataService
。
🔹 4. 高级用法:组合 Profile
Spring Boot 支持 组合 Profile。
例如在 application.yml
里:
spring:
profiles:
group:
dev: [common, mysql-dev]
prod: [common, mysql-prod]
这样当 spring.profiles.active=prod
时,会自动加载 application-common.yml
和 application-mysql-prod.yml
。
✅ 总结:
- 用
application-{profile}.yml
管理不同环境的配置。 - 启动时用
--spring.profiles.active=xxx
指定环境。 - 特殊逻辑可以用
@Profile
注解隔离。 - 生产推荐用 命令行参数/环境变量 指定,而不是写死在配置文件。