Spring Boot - 外部化属性

时间:2014-09-21 21:12:18

标签: java spring maven spring-boot

我有一个构建可执行战争的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),但回滚也没有帮助。

我错过了一些明显的东西吗?

更新1:

因此,在调试过程中,我发现Environment.getActiveProfiles()只返回1个项目,即使有多个活动配置文件(在这种情况下为dev& deploy)。所以,虽然我的报告只列出了dev,但部署也在那里。

我通过使用环境变量而不是配置文件的属性文件让事情再次运行,但我希望只使用文件来设置所有内容...

2 个答案:

答案 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确实正常运作。我有一个记录问题的组合&一个不匹配的依赖版本,使得事物看起来好像没有正确填充属性。

FWIW

事实证明,Logback插入以下

log.info("Profiles: {}", profileArray)

(数组为[dev, deploy])为Profiles: dev - 基本上只显示数组中的第一个元素。将我的日志记录调整为:

log.info("Profiles: {}", Arrays.toString(profileArray) )

让我快速找出另一个问题。