2013-03-11 10 views
7

Ich habe gerade entdeckt, dass die Konfiguration von Apache Commons Eigenschaften aus einer DataSource lesen kann, sie aber nicht zwischenspeichert. Meine Anwendung muss Eigenschaften oft lesen und es ist zu langsam, um jedes Mal auf die Datenbank zuzugreifen.Alternative zur Konfiguration von Apache Commons zum Lesen von Eigenschaften aus der Datenbank

Ich habe eine Kamel-Anwendung, die alle Nachrichten an Routen sendet, die mit meinen benutzerdefinierten Beans endet. Diese Beans werden mit Scope-Prototype erstellt (ich glaube an OOP ...) und sie werden/müssen einige Eigenschaften und eine Datenquelle (die aus den Eigenschaften URL/Name/etc liest) lesen, die vom aktuellen Benutzer von einer SQL-Datenbank abhängt . Jede Nachricht, die ich erhalte, erstellt eine Bean und so werden die Eigenschaften erneut gelesen. Leider kann ich nicht frei wählen, wo ich die Eigenschaften lesen soll, weil es jetzt eine andere Software (GUI) gibt, die nicht von mir geschrieben wurde und die ein Benutzer/Eigenschaften-Manager ist, der nach db schreibt. Also muss ich Eigenschaften davon lesen.

Können Sie mir eine Alternative vorschlagen?

Danke, Mario

+0

Was ist der Anwendungsfall? Wie oft liest du Daten, wie oft ändert es sich, wo wird es gespeichert? – bdares

+0

Können Sie einfach einen einfachen Cache implementieren? Sie verweisen auf den letzten Kommentar zu diesem Problem. https://issues.apache.org/jira/browse/CONFIGURATION-180?focusedCommentId=12491813&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-12491813 – longhua

+0

Der von Ihnen angegebene Link ist "leider" ein Patch für Commons, den ich nicht anwenden möchte. Nun würde ich fragen, ob ich die DatabaseConfiguration ableiten kann (ich gehe davon aus, dass es möglich sein sollte) – mgiammarco

Antwort

6

Sie die Netflix Archaius Projekt verwenden könnte, die das Caching-Verhalten Fähigkeiten Sie suchen als auch dynamische Refresh hinzufügt. Archaius ist um die Commons-Konfiguration herum aufgebaut.

Anstatt also die DatabaseConfiguration zu unterklassieren, können Sie Archaius 'DynamicConfiguration verwenden, wodurch Commons' AbstractConfiguration erweitert wird. Diese Klasse speichert die Quelle, die Sie möchten, und aktualisiert die Eigenschaften in einem Intervall, das Sie mit ihrer Poll-Scheduling-Klasse angeben.

Die einzige Klasse, die Sie implementieren müssten, ist eine PolledConfigurationSource, die Daten aus der Datenbank abruft und in einer Map ablegt. Sollte ziemlich einfach sein.

https://github.com/Netflix/archaius/wiki/Users-Guide