我有一个由 Gradle 管理的 Spring 启动应用程序。
到目前为止做了什么:
application.yaml
,application-dev.yaml
和application-qa.yaml
文件spring: profiles: active: dev
中application.yaml
(默认配置应该是dev
,如果没有被提及)需要做什么:
war
时提到或传递的配置文件进行构建。例如,对于 QA 构建,spring: profiles: active:
应该具有 value qa
,以便它可以获取application-qa.yaml
属性。dev
应选择配置文件到目前为止尝试了什么:
@activeProfiles@
在spring: profiles: active: @activeProfiles@
中添加并在application.yaml
以下代码段中添加build.gradle
:
processResources {
filter org.apache.tools.ant.filters.ReplaceTokens, tokens: [
activeProfiles: activeProfiles
]
}
并启动以下命令来构建war
- gradlew clean build -PactiveProfiles=qa
,它只是为war
文件做了正确的工作。但是现在这种方法的问题是,如何activeProfiles
在从 IDE 运行项目时提供默认值(我通常更喜欢main
从 IntelliJ运行类)?
我也不确定这是否是正确的方法,或者是否有任何其他方法可以完成此任务。我已经使用 Maven 轻松完成了所有这些工作,但我是 Gradle 的新手,并且项目要求使用 Gradle。
如果在运行/构建代码时没有传递配置文件,我能够设置默认配置文件,使用build.gradle
文件中的以下配置。在任何 IDE 中都不需要额外的配置来运行项目。
def activeProfiles=project.properties['activeProfiles'] ?: "dev" // set default (dev) profile if no profile is passed as property
processResources {
filter org.apache.tools.ant.filters.ReplaceTokens, tokens: [
activeProfiles: activeProfiles
]
}
我有 3 个 yaml 文件用于根据环境进行配置:
application.yaml
application-dev.yaml
application-qa.yaml
application.yaml
包含以下用于 spring 配置文件管理的配置,以及其他常见配置:
spring:
profiles:
active: @activeProfiles@
...
application-dev.yaml
和application-qa.yaml
文件包含与各自环境相关的配置。