【发布时间】:2018-12-08 19:48:20
【问题描述】:
在我的 Spring Cloud 应用程序中,我想让用户更改一些默认设置。我将默认属性保留在 jar 中的 application.yml 中,并使用
启动我的应用程序-Dspring.config.additional-location=/some_location/properties_override.yml
当用户更改 properties_override.yml 时,我想重新加载配置而不重新启动应用程序。 Spring 配置服务器似乎是它的理想机制,但我无法弄清楚它是否可以与位于文件系统本地的属性一起使用。当我查看 spring.cloud.config 时,它似乎只支持 git、jdbc 和 svn 服务器。这些机制都不是我的选择我想知道你是否可以使用 Spring Cloud Config 从文件系统上的本地文件重新加载配置?
使用“native”配置文件似乎是正确的方法,但它产生了另一个问题:我需要 cloud.config.server.native.searchLocations 中的两个条目:一个用于类路径上的 application.yml(在模块的 src \main\resources\config 文件夹)和文件路径上的第二个。 将 searchLocations 设置为:
searchLocations: classpath:/config,file:/some_location/properties_override.yml
application.yml 中的属性没有被拾取。
如果我的 application.yml 我有条目
custom:
property: foo
有一个 Spring bean 的属性标记为
@Value("${custom.property"})
如果 application.yml 中没有 searchLocations,则正在解析该属性。使用 searchLocations 我得到一个例外:
java.lang.IllegalArgumentException: Could not resolve placeholder 'custom.property' in value "${custom.property}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
【问题讨论】: