Dynamisches laden von properties Datei mit Spring
Habe ich geschrieben PropertyUtils-Klasse (aus dem internet), die geladen werden, die die Eigenschaften
<bean id="propertiesUtil" class="com.myApp.PropertiesUtil" >
<property name="locations">
<list>
<value>classpath:myApp/myApp.properties</value>
</list>
</property>
</bean>
und ein PropertiesUtil Klasse ist, wie unten
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);
}
}
Später, ich kann das Eigentum durch den Aufruf PropertiesUtil.getProperty () - Methode.
Aber jetzt möchte ich diese etwas zu modifizieren, so dass, Wenn die Anwendung.Eigenschaften modifiziert werden/geändert von Benutzer, es sollte wieder geladen werden
Wahrscheinlich muss ich FileWatcher Klasse
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);
}
aber meine Zweifel sind
- Wie erstelle ich Datei-Objekt unter Verwendung classpath:myApp/myApp.Eigenschaften
(weil der absolute Pfad ist nicht bekannt) - Wie rufe ich/Anruf Frühjahr zu
laden/übergabe der neuen Anwendung.Eigenschaften PropetisUtil Klasse [in
onChange-Methode].
In Ihrer Methode loadProperties(), gibt es einen bestimmten Grund, warum Sie das looping für jede Eigenschaft? Kannst du nicht mit einem Konstruktor, der die Eigenschaften der Klasse, nimmt Eigenschaften wie param?
InformationsquelleAutor Reddy | 2013-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Spring ReloadableResourceBundleMessageSource Klasse wie unten:
Dann können Sie anrufen MessageSource.getMessage () - Methode, um den Wert der Eigenschaft. Hier ist ein Beispiel:
Können Sie direkt aufrufen, Datei ApplicationContext.getMessage(String code, Object[] args, Locale locale), wenn Sie die Umbenennung Ihrer 'myProperties' bean 'messageSource'.
Für Ihre web-apps, setzen Sie bitte Ihr Eigentum Dateien außerhalb des web-app-classpath (weil der web-server-cache). Zum Beispiel, WEB-INF/conf/myApp.Eigenschaften
InformationsquelleAutor AnthonyY
Folgende unterstützt, was Sie suchen:
https://commons.apache.org/proper/commons-configuration/userguide/howto_properties.html
Dies sollte den trick tun. Ich habe nicht verwendet, aber es mir scheint ziemlich einfach sein.
commons.apache.org/configuration/userguide/howto_filebased.html dies gibt eine ziemlich gute Einführung.
Commons configuration 2.x nicht verwenden die FileChangedReloadingStrategy nicht mehr und wurde ersetzt. Siehe commons.apache.org/proper/commons-configuration/userguide/...
InformationsquelleAutor Till
Vielleicht der einfachere Weg wäre, zu tun, wie diese:
Diese Weise können Sie den Zugriff auf Ihre Eigenschaften aus-bean injizieren/Zugriff auf bean mit dem Namen "configProperties".
Nicht sicher, ob dies ist, was Sie brauchen, denn es ist nicht möglich zu ändern configProperties zur Laufzeit. Aber das ist ein sauberer Weg, und Sie brauchen nicht zu schreiben, für jede weitere Klasse.
InformationsquelleAutor kukulis