【发布时间】:2017-11-24 16:06:08
【问题描述】:
我有一个 web 服务,它通过 spring 从位于服务器中的 application.properties 文件中获取属性,例如 query[testSql]
public class RuntimeEnvironmentPropertiesConfigurerextends PropertyPlaceholderConfigurer
implements InitializingBean, RuntimeEnvironmentInterface
现在该查询已注入到我的 Spring bean dao 中。
<bean id="dao" name="dao" class="com.dao.DaoImpl">
<property name="ackJdbcTemplate" ref="ackJdbcTemplate" />
<property name="testSql" value="${dao.query.tSql}" />
</bean>
在How can I reload properties file in Spring 4 using annotations? 链接的帮助下,我可以在运行时重新加载该属性。 验证人
@Autowired
public RuntimeEnvironmentInterface propertyLoader;
....
Set s=propertyLoader.getProperties();
Iterator itr=s.iterator();
while(itr.hasNext()){
String tempKey=String.valueOf(itr.next());
logger.info(tempKey +"==="+propertyLoader.getProperty(tempKey));
但问题是我的 dao bean 不接受更新的 testSql 查询。它在旧的上运行,直到我重新启动应用程序。
我在单独的 url 映射中找到了一种方法,我写了一个方法来完成以下工作:
Dao.setTestSql(propertyLoader.getProperty("com.dao.query.tSql"));
更新属性的人必须在更新属性后点击 url。
但是我必须为所有 bean 和注入的财产做这件事。这是一项非常忙碌的工作。我错过了一个财产,我注定要失败。 有没有其他方法可以自动更新注入的 bean?我需要在不重启的情况下反映我更新的属性。
我试图理解给出的 wuenschenswert 代码但无法理解。
【问题讨论】:
-
为什么不在你的 DAO 中使用 propertyLoader?
-
@Alexey Soshin 谢谢你的建议,但整个应用程序中有超过 12 个 bean 并且有很多属性,所以我正在寻找重新加载所有属性的方法,而不必去每个 Spring bean 和设置属性。
标签: java spring properties spring-bean