2009-02-27 17 views
5

Ich benutze Spring 2.5.6. Ich habe eine Bean, deren Eigenschaften aus einer Eigenschaftendatei über eine PropertyPlaceholderConfigurer zugewiesen werden. Ich frage mich, ob es möglich ist, die Eigenschaft der Bean aktualisiert zu haben, wenn die Eigenschaftendatei geändert wird. Es würde zum Beispiel einen periodischen Prozess geben, der das letzte Änderungsdatum der Eigenschaftendatei überprüft, und wenn es sich geändert hat, muss die Bean erneut geladen werden.Spring Bean Eigenschaften automatisch aktualisiert von Eigenschaften Datei

Ich frage mich, ob es schon etwas gibt, das meine Anforderungen erfüllt. Wenn nicht, was wäre der beste Ansatz zur Lösung dieses Problems?

Danke für Ihre Hilfe.

Antwort

3

Könnte auch in Verwendung von Spring PropertyOverrideConfigurer aussehen. Kann die Eigenschaften erneut lesen und in einigen Polling-/Schedularbohnen erneut anwenden.

Es hängt davon ab, wie die tatsächlich konfigurierten Beans diese Eigenschaften verwenden. Sie können sie zum Beispiel indirekt irgendwo zwischenspeichern.

+0

Es scheint, dass dies der geradlinigste Ansatz ist, und was wir am Ende tun werden. Danke –

+0

Ich sehe den Unterschied zwischen PropertyOverrideConfigurer und PropertyPlaceholderConfigurer in dieser Hinsicht nicht. Es gibt Unterschiede, wie die Eigenschaften angegeben werden, aber beide werden nur einmal als BeanFactoryPostProcessor angewendet, bevor die tatsächlichen Beans erstellt werden. Wie könnten sie wieder angewendet werden? –

+0

@hstoerr: Bei einem PropertyPlaceholderConfigurer sind die Einstellungen innerhalb der Spring (Xml) -Konfiguration (mit {..} Ausdrücken) 'versteckt'. Mit PropertyOverrideConfigurer hat die Konfiguration das Format BeanName.Eigenschaft = Wert. Also kann das auf existierende Beans erneut angewendet werden (zB PropertyOverrideConfigurer.processProperties – jor

0

Ein Weg, dies zu tun ist, eine groovy Konsole in Ihre Anwendung einzubetten. Here's einige Anweisungen. Sie waren sehr einfach zu machen, btw - nahm mir sehr wenig Zeit, obwohl ich mit groovy nicht so vertraut bin.

Sobald Sie das tun, können Sie einfach in die Konsole gehen und Werte innerhalb der Live-Anwendung im laufenden Betrieb ändern.

2

Wenn Sie zur Laufzeit dynamische Eigenschaften wünschen, ist JMX möglicherweise eine andere Möglichkeit.

0

Sie könnten versuchen, einen benutzerdefinierten Bereich für die Bean zu verwenden, der Beans bei Änderungen der Eigenschaftendatei neu erstellt. Siehe meine more extensive answer here.

0

Spring Cloud Config verfügt über Funktionen zum Ändern der Konfigurationseigenschaften zur Laufzeit über den Spring Cloud Bus und die Verwendung eines Cloud Config-Servers. Die Konfigurations- oder .properties- oder .yml-Dateien werden von der Spring-App "externalisiert" und stattdessen von einem Spring Cloud-Konfigurationsserver abgerufen, mit dem die App beim Start eine Verbindung herstellt. Dieser Cloud Config Server ruft die entsprechenden Konfigurationsdateien .properties oder .yml-Dateien aus einem GIT-Repo ab (es gibt andere Speicherlösungen, aber GIT ist am gebräuchlichsten). Sie können dann die Konfiguration zur Laufzeit ändern, indem Sie den Inhalt der Konfigurationsdateien des GIT-Repos ändern. Der Cloud Config Server überträgt die Änderungen an alle Client Spring-Anwendungen über den Spring Cloud Bus und die Konfiguration dieser Anwendungen wird ohne Neustart aktualisiert App Sie können ein funktionierendes einfaches Beispiel hier finden: https://github.com/ldojo/spring-cloud-config-examples

Verwandte Themen