Spring配置服务器从本地配置文件刷新属性

时间:2018-06-29 15:09:05

标签: spring-cloud-config

在我的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]

1 个答案:

答案 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,它将刷新值并将其替换为更新的值。