プロパティファイルを1つのクラスにロードし、アプリケーション全体でそのクラスを使用して取得しています。
public class PropertiesUtil extends PropertyPlaceholderConfigurer {
private static Map<String, String> properties = new HashMap<String, String>();
@Override
protected void loadProperties(final Properties props) throws IOException {
super.loadProperties(props);
for (final Object key : props.keySet()) {
properties.put((String) key, props.getProperty((String) key));
}
}
public String getProperty(final String name) {
return properties.get(name);
}
}
およびApplicationContext.xml
<bean id="propertiesUtil"
class="com.test.PropertiesUtil">
<property name="locations">
<list>
<value>classpath:test/test.properties</value>
</list>
</property>
</bean>
ここで、プロパティファイルが変更されるたびに再ロードされることを確認したいと思います。
Tomcatサーバーと一緒に初期化するリスナークラスが1つあります。そして私はファイルウォッチャーのために以下のロジックを書きました
TimerTask task = new FileWatcher(new File("c:\\temp-reb\\config\\config.properties")) {
/*
* (non-Javadoc)
* @see com.belgacom.rosy.rebecca.utils.FileWatcher#onChange(java.io.File)
*/
@Override
protected void onChange(File file) {
loadServiceProperties(file);
loadMetadata();
}
};
Timer timer = new Timer();
timer.schedule(task, new Date(), Long.valueOf(properties.getProperty("properties.file.timer.schedule"))); // repeat the check every second
問題は
- FileWatcherを実行するにはパスが必要ですが、ハードコーディングしたくありません
- プロパティを呼び出して明示的にリロードするようにSpringに指示するにはどうすればよいですか?