Java Spring重新加载属性-Bean未更新

Java Spring重新加载属性-Bean未更新,java,spring,properties,spring-bean,Java,Spring,Properties,Spring Bean,我有一个webservice,它通过spring从位于类似服务器的查询[testSql]中的application.properties文件获取属性 public class RuntimeEnvironmentPropertiesConfigurerextends PropertyPlaceholderConfigurer implements InitializingBean, RuntimeEnvironmentInterface 现在,查询被注入到我的SpringBea

我有一个webservice,它通过spring从位于类似服务器的查询[testSql]中的application.properties文件获取属性

public class RuntimeEnvironmentPropertiesConfigurerextends PropertyPlaceholderConfigurer
        implements InitializingBean, RuntimeEnvironmentInterface
现在,查询被注入到我的SpringBeanDAO中

<bean id="dao" name="dao" class="com.dao.DaoImpl">
  <property name="ackJdbcTemplate"  ref="ackJdbcTemplate" />  
  <property name="testSql" value="${dao.query.tSql}" />
 </bean>
但问题是我的DAOBean并没有接受更新的testSql查询,它在旧的查询上运行,直到我重新启动应用程序

我在单独的url映射中找到了一种类似的方法,我编写了一个方法,其作用如下:

Dao.setTestSql(propertyLoader.getProperty("com.dao.query.tSql"));
更新的人必须在更新属性后点击url

但是我必须为所有的bean和注入属性做这些。这是一项非常繁忙的工作。我错过了一项属性,我注定要失败。 有没有其他方法可以自动更新注入的bean?我需要在不重新启动的情况下反映我更新的属性

我试图理解给出的wuenschenswert代码,但无法理解

<property name="testSql" value="${dao.query.tSql}" />
有一个问题:当属性数量增加时,这可能会开始看起来很难看。但是,如果您创建一些封装这些访问的类,那么这可以得到缓解;该类将通过其方法提供属性。例如:

public class DynamicProperties {
    private final RuntimeEnvironmentInterface propertyLoader;

    public DynamicProperties(RuntimeEnvironmentInterface propertyLoader) {
        this.propertyLoader = propertyLoader;
    }

    public String tSql() {
        return propertyLoader.getProperty("dao.query.tSql");
    }

    ... other methods for other properties
}
然后在
Dao
中创建此类的实例:

private DynamicProperties dynamicProperties = new DynamicProperties(propertyLoader);
然后

executeQuery(dynamicProperties.tSql());

还有一点好处:您可以在相同的
DynamicProperties
类中进行类型转换(例如,当您的属性是
int
而不是
String
).

为什么不在DAO中使用propertyLoader?@Alexey Soshin感谢您的建议,但整个应用程序中有12个以上的bean,并且有这么多属性,因此我正在寻找方法来重新加载所有属性,而不必访问每个Spring bean并设置属性。@Roman关于包装器,这是一个非常酷的想法!!!我知道,但是在整个应用程序中有超过12个bean,而且这些bean中注入了太多属性,所以我正在寻找方法来重新加载所有属性,而不必转到每个springbean并设置属性。因此,将来他们添加、删除或更新任何bean定义,不需要更改方法。该方法将重新加载文件中的所有属性,并在使用时更新属性。
private DynamicProperties dynamicProperties = new DynamicProperties(propertyLoader);
executeQuery(dynamicProperties.tSql());