关键词:Spring Boot、多环境配置、application.yml、profile、dev、test、prod
在实际项目开发中,我们通常需要为不同的运行环境(如开发、测试、生产)配置不同的参数。Spring Boot 提供了强大的多环境配置支持机制,通过 application-{profile}.yml
或 application-{profile}.properties
文件,我们可以轻松实现不同环境下的差异化配置。
本文将围绕以下内容进行详细讲解:
spring.profiles.active
指定当前激活的环境@Profile
注解控制 Bean 的加载每部分都配有 完整的 YAML 配置文件和 Java 示例代码。
Spring Boot 允许我们为不同的环境定义多个配置文件,每个文件对应一个 profile,例如:
application-dev.yml
(开发环境)application-test.yml
(测试环境)application-prod.yml
(生产环境)通过设置 spring.profiles.active=xxx
来指定当前使用的环境配置。
这个文件是通用配置,无论哪个环境都会被加载。如果某个 profile 文件中也定义了相同属性,则会覆盖默认配置。
src/
└── main/
└── resources/
├── application.yml
├── application-dev.yml
├── application-test.yml
└── application-prod.yml
server:
port: 8080
spring:
application:
name: springboot-multi-env
spring:
datasource:
url: jdbc:mysql://localhost:3306/dev_db?useSSL=false&serverTimezone=UTC
username: root
password: dev_password
driver-class-name: com.mysql.cj.jdbc.Driver
spring:
datasource:
url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC
username: test_user
password: test_password
driver-class-name: com.mysql.cj.jdbc.Driver
spring:
datasource:
url: jdbc:mysql://db.prod.example.com:3306/prod_db?useSSL=false&serverTimezone=UTC
username: prod_user
password: prod_secure_password
driver-class-name: com.mysql.cj.jdbc.Driver
spring:
profiles:
active: dev
java -jar yourapp.jar --spring.profiles.active=test
java -Dspring.profiles.active=prod -jar yourapp.jar
CMD java -Dspring.profiles.active=prod -jar /app.jar
env:
- name: SPRING_PROFILES_ACTIVE
value: "prod"
你可以使用 @Profile("dev")
注解来控制某些 Bean 是否加载。
@Component
@Profile("dev")
public class DevDataSourceConfig {
public DevDataSourceConfig() {
System.out.println("加载【开发环境】数据源配置");
}
}
@Component
@Profile("prod")
public class ProdDataSourceConfig {
public ProdDataSourceConfig() {
System.out.println("加载【生产环境】数据源配置");
}
}
如果你希望在构建阶段就指定环境,可以结合 Maven 的 profile 实现资源过滤。
<profiles>
<profile>
<id>devid>
<properties>
<activatedProperties>devactivatedProperties>
properties>
profile>
<profile>
<id>prodid>
<properties>
<activatedProperties>prodactivatedProperties>
properties>
profile>
profiles>
<build>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
mvn clean package -Pprod
问题 | 原因 | 解决方案 |
---|---|---|
启动时报错找不到数据库连接 | 没有正确激活 profile | 查看日志确认 spring.profiles.active 设置 |
application.yml 和 application-dev.yml 冲突 | 属性冲突 | 优先级:命令行 > JVM > profile 文件 > 默认文件 |
Docker/K8s 环境未生效 | 未传递环境变量 | 检查容器启动参数或 K8s ConfigMap |
通过本文的学习,你应该已经掌握了以下内容:
模块 | 技能点 |
---|---|
多环境配置原理 | Profile 概念与加载顺序 |
配置文件命名规范 | application-dev.yml 等 |
激活方式 | application.yml、命令行、JVM、Docker、K8s |
Bean 动态加载 | 使用 @Profile 控制组件加载 |
构建时配置 | 结合 Maven 实现打包前环境选择 |
生产部署技巧 | 如何安全地切换环境配置 |
这些技能是你构建企业级 Spring Boot 微服务系统的重要基础。