如何在没有jvm restart的情况下在运行时重新加载/刷新属性?
我正在寻找优雅的东西,它应该适用于Prod。因此,我猜JRebel不在桌面上。
目前,我在MYProject.properties中有我的属性
oms.url=abbc.com
checkin.enabled=true
和我的java文件自动连接搜索并使用applicationContext提供的不同属性文件中的这些属性:
<bean id="applicationProperties" class="myproject.config.CustomPropertyPlaceHolder">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:MyProject.properties</value>
<value>file:${CATALINA_BASE}/lib/MyProject.properties</value>
<!--<value>file:///appl/conf/outlet.properties</value>-->
<value>classpath:db.password</value>
<value>file:${CATALINA_BASE}/lib/db.password</value>
<!-- <ref bean="applPropertiesFromDb" /> -->
</list>
</property>
</bean>
和Java文件:
@Value("${checkin.enabled}")
private String checkinEnabled;
答案 0 :(得分:0)
使用ReloadableResourceBundleMessageSource
。
但这不会刷新。
private String checkinEnabled;
您必须重新加载checkinEnabled
变量。
答案 1 :(得分:0)
考虑像这样实现MessageSource Spring bean:
1.Update applicationContext.xml
<bean id="messageSource" class="com.mycompany.service.DynamicMessageSource" />
2.编写自己的MessageSource实现
public class DynamicMessageSource extends AbstractMessageSource {
// Autowire propertiesService
@Override
protected MessageFormat resolveCode(String code, Locale locale) {
String result = propertiesService.getProperty(code);
return new MessageFormat(result, locale);
}
}
3.实现自定义服务以从某个位置读取属性(数据库,属性文件等) 4.更新属性源时,享受属性的动态更新。