我希望在春季启动应用程序中从文件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。
答案 0 :(得分:0)
有两种解决方案
使用spring devtools可以在配置文件更改时实现自动重启。仅适用于开发环境。
当您点击服务时,将加载属性文件,并更新您的配置类属性。摘要:
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
。