如何在没有jvm restart的情况下在运行时重新加载/刷新属性?

时间:2013-08-26 09:41:37

标签: java spring refresh reload applicationcontext

如何在没有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;

2 个答案:

答案 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.更新属性源时,享受属性的动态更新。