Spring @Value并在运行时动态修改值(PlaceholderConfigurerSupport)

时间:2014-09-17 05:29:24

标签: spring

这是关于在@Value注释中定制Spring的占位符解析的问题。

我们使用@Value初始化应用程序中的所有属性,通常来自servlet context init params,例如:

的web.xml

<context-param>
    <param-name>app.some.param</param-name>
    <param-value>SOME_VALUE</param-value>
</context-param>

类文件

@Value("${app.some.param:DEFAULT_VALUE}")
private String myParameter;

我们实际上没有使用web.xml,我们使用Tomcat上下文文件甚至指定使用vmargs。

我们要支持的是在运行时对这些属性进行动态更改。我想以某种方式收集@Value中使用的属性键列表,它还有一个像@Dynamic这样的新注释。对于标记为@Dynamic的属性,bean可以提供相应的setter,以便在修改属性时进行任何重新初始化。

我想创建一个支持按键更新属性的服务,例如:

void setProperty(String key, String value) {
    // find all beans that have @Value and @Dynamic and set field or call setter
    // NB - should support Spring type coercion, eg. string --> integer, boolean, list, etc.
}

我一直在寻找PlaceholderConfigurerSupport和BeanDefinitionVisitor的源代码。我似乎可以覆盖PlaceholderConfigurerSupport.doProcessProperties并创建一个自定义的BeanDefinitionVisitor,但是需要花费很多代码。我想知道是否有人曾经看过这个并找到了解决方案。

我应该注意到我们最终还想要做的事情。我们希望在后备存储中保留更改的属性,如果已经修改,则在启动时使用这些属性而不是配置。通过这种方式,我们拥有属性源的层次结构:代码中的默认值,上下文/属性文件,已修改的peristed配置。我们还想提供一个显示所有动态属性集的UI。你明白了。

由于

0 个答案:

没有答案