我想用 ENV 设置覆盖 application.properties 中的任何属性。在我的应用程序中,我使用带有点“.”的“前缀”来定义属性。和后缀“破折号”(例如,“-”)。
例如:
application.server.jgroups-port=一些端口#
现在,我想从 OS ENV 设置中覆盖此属性。
在 Windows 上,当我设置此 ENV 属性时,这是我的结果:
首先(失败),
Windows ENV >> APPLICATION_SERVER_JGROUPS_PORT = 5445
environment.getProperty("application.server.jgroups-port") returns NULL
第二个(失败)
Windows ENV >> APPLICATION_SERVER_JGROUPSPORT = 5445
environment.getProperty("application.server.jgroups-port") returns NULL
第三(这行得通!)
Windows ENV >> APPLICATION_SERVER_JGROUPS-PORT = 5445
environment.getProperty("application.server.jgroups-port") returns 5445
注意,最后一个上的“破折号”(例如“-”)。
耶!我已经使用“破折号”从 Windows ENV 有效地设置了属性。 Spring Boot 将此 ENV 完美映射到应用程序属性。
但是,在 Linux 上,它在其 ENV 中不接受“破折号”(例如,“-”),因此当我使用与在 Windows 上使用的相同方法时,我的 .profile 会崩溃 >> APPLICATION_SERVER_JGROUPS-PORT = 5445. 我需要做什么才能使 Linux ENV 设置设置我的“application.server.jgroups-port”属性?
编辑:
看起来 org.springframework.core.env.SystemEnvironmentPropertySource 是我需要做一些工作来支持 Java 中的虚线属性名称作为 Linux ENV 的地方。例如,在 SystemEnvironmentPropertySource 中调用 getProperty("somePrefix.foo-suffix")
= APPLICATION_SERVER_JGROUPS_PORT 就像它有一个句点 - getProperty("somePrefix.foo.suffix")
最佳答案
您还可以提供一个名为 SPRING_APPLICATION_JSON
的环境变量,其中包含有效的 JSON。这将允许您覆盖具有特殊字符的键。例如:
export SPRING_APPLICATION_JSON='{"application.server.jgroups-port": 8080}'
这样,您还可以像这样覆盖在 yaml 中定义的数组:
foo.bar:
- 1
- 2
- 3
与:
export SPRING_APPLICATION_JSON='{"foo.bar": ["4","5","6"]}'
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
关于linux - Spring Boot : How to override properties with dash "-" on Linux ENV . 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158732/