Profile 配置
→ 返回构建工具
Profile 用于针对不同环境(开发、测试、生产)切换构建配置,避免在代码中硬编码环境差异。
Maven Profile
定义 Profile
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
<db.url>jdbc:mysql://localhost:3306/mydb</db.url>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
<db.url>jdbc:mysql://prod-server:3306/mydb</db.url>
</properties>
</profile>
</profiles>激活方式
mvn package -P prod # 手动激活
mvn package -P prod,metrics # 激活多个
mvn package -P !dev # 禁用指定自动激活条件:
<activation>
<jdk>17</jdk> <!-- JDK 版本 -->
<property><name>ENV</name><value>prod</value></property> <!-- 环境变量 -->
<file><exists>prod.properties</exists></file> <!-- 文件存在 -->
</activation>结合资源过滤
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>application.properties 中使用占位符,构建时自动替换:
db.url=${db.url}
app.env=${env}mvn help:active-profiles # 查看当前激活的 ProfileGradle 环境切换
Gradle 没有内置 Profile,通常通过项目属性实现:
./gradlew build -Penv=prod// build.gradle.kts
val env = project.findProperty("env") as String? ?: "dev"
tasks.processResources {
filesMatching("application.properties") {
expand("env" to env)
}
}多资源目录按环境加载:
sourceSets {
main {
resources {
srcDirs("src/main/resources", "src/main/resources-$env")
}
}
}Spring Boot 配合
Spring Boot 项目通过 application-{profile}.yml 区分环境:
src/main/resources/
├── application.yml # 公共配置
├── application-dev.yml
├── application-test.yml
└── application-prod.yml
java -jar app.jar --spring.profiles.active=prod