我有一个构建可执行战争的Spring Boot项目,并在application.properties
中配置了application-dev.properties
文件和src/main/resources
。
application.properties
中的第一行是spring.profiles.active=dev
,在按预期运行时触发包含application-dev.properties
。
我的问题是,我似乎无法使用外部属性源覆盖这些属性(在所有内容被震动/加强后)。为了简单调试,我在项目的根目录中创建了一个文件settings.properties
,并在其中指定了spring.profiles.active=dev,deploy
,希望同时触发" deploy"轮廓。
但是,当我运行以下内容时:
java -jar target/project-0.1.0-LOCAL-NA.war --spring.config.location=file:./settings.properties
永远不会启用部署配置文件。我以为我有一个以前的版本(现在运行1.1.6.RELEASE,来自1.0.2.RELEASE),但回滚也没有帮助。
我错过了一些明显的东西吗?
因此,在调试过程中,我发现Environment.getActiveProfiles()
只返回1个项目,即使有多个活动配置文件(在这种情况下为dev& deploy)。所以,虽然我的报告只列出了dev,但部署也在那里。
我通过使用环境变量而不是配置文件的属性文件让事情再次运行,但我希望只使用文件来设置所有内容...
答案 0 :(得分:1)
当启动jar文件时,我们发现你无法使用" -D"注入系统变量。你必须使用" - "。
这对我们有用,假设您将应用编码为使用配置文件
java -jar myapplication.jar
--spring.profiles.active=override
--spring.config.location=file:/path/to/file/application-override.properties
答案 1 :(得分:0)
令人尴尬,但我必须承认:我完全误读了我正在处理的结果。
--spring.config.location=settings.properties
确实正常运作。我有一个记录问题的组合&一个不匹配的依赖版本,使得事物看起来好像没有正确填充属性。
事实证明,Logback插入以下
log.info("Profiles: {}", profileArray)
(数组为[dev, deploy]
)为Profiles: dev
- 基本上只显示数组中的第一个元素。将我的日志记录调整为:
log.info("Profiles: {}", Arrays.toString(profileArray) )
让我快速找出另一个问题。