在我的Spring Cloud应用程序中,我想让用户更改一些默认设置。我将默认属性保存在jar中的application.yml中,并使用
启动我的应用程序-Dspring.config.additional-location=/some_location/properties_override.yml
当用户更改properties_override.yml时,我想重新加载配置而不重新启动应用程序。 Spring config服务器似乎是一种理想的机制,但是我无法弄清楚它是否可以与文件系统本地的属性一起使用。当我查看spring.cloud.config时,它似乎仅支持git,jdbc和svn服务器。这些机制对我来说都不是一种选择,我想知道您是否可以使用Spring Cloud Config从文件系统上的本地文件重新加载配置?
使用“本机”配置文件似乎是正确的方法,但它产生了另一个问题:我在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]
答案 0 :(得分:1)
设置基于文件系统的存储库是最简单的方法
完成这个。
使用spring.profiles.active=native
应该可以。
这是使用yml文件的示例:
server:
port: 8888
spring:
profiles:
active: native
cloud:
config:
server:
native:
searchLocations: file:///Users/gurinder/projects/application-name/configserver/src/main/resources/config/yourservice
还要检查此链接stackoverflow-question。
如果您想用更新后的属性刷新属性。首先,您需要在Spring boot Main应用程序类或包含您需要刷新的那些属性的类上使用注释@RefreshScope
。其次,您调用此URL:http://<yourserver>:8080/refresh
,它将刷新值并将其替换为更新的值。