【问题标题】:Override Property value in PropertyPlaceholderConfigurer覆盖 PropertyPlaceholderConfigurer 中的属性值
【发布时间】:2015-10-28 08:21:30
【问题描述】:

在加载 JBOSS 应用程序服务器时,我需要覆盖属性文件中给出的属性值。

我尝试使用以下代码覆盖 PropertyPlaceholderConfigurer 中的 processProperties() 方法。

我的属性文件有这个条目

base.url="defaultUrl"

public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

protected String convertPropertyValue(String originalValue) {
    return (originalValue != null) ? originalValue.trim() : originalValue;
}

@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
        throws BeansException {
    super.processProperties(beanFactory, props);
    for (Enumeration names = props.propertyNames(); names.hasMoreElements();) {
        String key = (String) names.nextElement();
        props.put("base.url", getUpdatedUrl());
    }
}

}

我在应用程序上下文中的占位符 ${base.url} 中注入 base.url 值。

我应该如何在运行时更新给定属性的值。上面的代码总是取属性文件中的值而不是更新的值。

【问题讨论】:

  • 你把你的类注册为bean了吗? (如果你调试你的代码,sn-p 执行了吗?)
  • 是的,它正在执行并设置值,但我将基本 url 作为属性文件中的一个。
  • 参考this

标签: spring spring-2.5


【解决方案1】:

吹掉这个问题的灰尘。这可以使用 PropertyPlaceholderConfigurer 并添加一个新的属性文件(在列表的末尾)来完成,您可以在其中放置要覆盖的属性。 (属性文件的名称/文件路径可以包含您在构建时传递的环境变量)。这是PropertiesLoaderSupport#setLocations的javadoc:

注意:以后文件中定义的属性将覆盖属性 定义较早的文件,以防重叠键。因此,确保 最具体的文件是给定列表中的最后一个 地点。

从 Spring 5.2 开始,这已被弃用,取而代之的是 PropertySourcesPlaceholderConfigurer:

解决 ${...} 的 PlaceholderConfigurerSupport 的专业化 bean 定义属性值和 @Value 中的占位符 针对当前 Spring Environment 及其集合的注释 属性来源。

一些例子here

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 2013-07-19
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多