Spring按需重新加载属性

时间:2018-02-15 22:58:39

标签: spring spring-boot

我希望在春季启动应用程序中从文件On Demand加载属性。

当属性文件发生更改时,我需要从文件中加载属性。

我正在使用@Configuration属性来加载属性,方法是设置spring.config.location = file:/../ test-properties.yml。

保存数据的Bean类

@Configuration

@ConfigurationProperties 公共类GetValues {

List<String> values = new ArrayList<String>();

// getters and setters }

测试properties.yml

values: - X1 - X2 - X3

我有一个休息服务来将从属性文件加载的数据加载到后端,我在其中自动装载GetValues Bean。

每当属性文件发生更改时,我都会调用此服务将属性加载到后端。

现在,它每次都加载相同的属性,因为属性已经加载到上下文中。

有没有办法在每次点击服务时从文件重新加载属性?我不想使用Spring-Cloud,@ RefreshScope。

2 个答案:

答案 0 :(得分:0)

有两种解决方案

  1. 使用spring devtools可以在配置文件更改时实现自动重启。仅适用于开发环境。

  2. 当您点击服务时,将加载属性文件,并更新您的配置类属性。摘要:

    Properties prop = new Properties();
    InputStream input = null;
    input = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileNameProperties);
    prop.load(input);
    bean.setValue(prop.getProperty("attribute1"));
    

答案 1 :(得分:0)

如果您不想使用Spring Cloud Config / @RefreshScope,则可以选择使用Apache公共区中的FileChangeListener / WatchService(或类似)库)或JDK 7并重新加载属性。确保您同步已加载属性的用法,并在文件更改时更新它们,可以通过ReentrantReadWriteLock