Я написал класс PropertyUtils (из Интернета), который загрузит Свойствадинамической загрузки файл свойств с помощью Spring
<bean id="propertiesUtil" class="com.myApp.PropertiesUtil" >
<property name="locations">
<list>
<value>classpath:myApp/myApp.properties</value>
</list>
</property>
</bean>
и класс PropertiesUtil как ниже
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);
}
}
Позже, я могу получить свойство, вызвав метод PropertiesUtil.getProperty().
Но теперь я хочу, чтобы изменить его немного, например, что если myApp.properties модифицируются/изменены пользователем, он должен быть загружен снова
Возможно, мне нужен класс FileWatcher
public abstract class FileWatcher extends TimerTask {
private long timeStamp;
private File file;
public FileWatcher(File file) {
this.file = file;
this.timeStamp = file.lastModified();
}
@Override
public final void run() {
long timeStampNew = this.file.lastModified();
if (this.timeStamp != timeStampNew) {
this.timeStamp = timeStampNew;
onChange(this.file);
}
}
protected abstract void onChange(File newFile);
}
но мой сомнения
- Как создать объект File, используя путь к классам: MYAPP/myApp.properties (потому что абсолютный путь не известен)
- Как мне вызвать/вызвать весну до загрузить/передать новые параметры myApp.properties классу PropetisUtil [в onChange method].
В вашем методе loadProperties() есть ли какая-либо конкретная причина, по которой вы выполняете цикл для каждого свойства? Не можете ли вы использовать конструктор класса Properties, который принимает свойства как param? – Parvez