config-Dateien für eine webapplication - laden einmal und speichern Sie wo?
Ich habe eine Reihe von Eigenschaften (Konfigurationen), können Sie pro Umwelt. Allerdings sind diese Werte nicht ändern, wenn die web-Anwendung bereitgestellt wird.Also denken Sie, dass es ist eine Anwendung.properties-Datei, die ich Lesen möchte viel Zeit während der normalen Programmablauf.
Ich weiß, dass ich wahrscheinlich laden Sie diese auf die Startzeit des Servers. Aber was ist die beste Praxis so weit wie der Zugriff auf diese aus einfachen java-Klassen im backend? Diese business-Klassen haben nichts zu tun mit servlets etc und haben keine Abhängigkeiten auf eine webapp.
Also heute lade ich mir die Eigenschaften über einen ServletContext. Was dann? Wo sollte ich Sie so leicht zugänglich sein, um andere Objekte, ohne dass man einen fileInputStream.laden wieder?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umsetzung einer
ServletContextListener
.Hier ist eine einfache kickoff Beispiel:
denen Sie die register wie folgt in
web.xml
:und die Sie zugreifen können, in Ihren servlets wie folgt:
Nachdem Sie einen zweiten Gedanken, diese Eigenschaften sind somit zu 100% spezifisch für business-Schicht, und nicht die Webanwendung selbst? Dann ein
ServletContextListener
ist in der Tat ungeschickt und zu eng gekoppelt. So geben Sie die business-Schicht Ihre eigenenConfig
Klasse, lädt die Eigenschaften aus dem classpath und speichert es in einigenstatic
variable (Map<String, Properties>
vielleicht?).Properties
alsstatic
variable in einer Klasse auch mehr als genug.static
+ unit-tests = aaaaargh!! Btw: ein Rahmen ist nicht notwendig, zum laden von config-Dateien. Nur für den Fall, dass Sie bereits mit einem. Sonst einfach neu erfinden, was der Durchschnittliche framework bereits tut.ServletContextListener
und so weiter.ClassLoader
ausThread#contextClassLoader()
sollte es funktionieren, unabhängig von der Art und Weise, die Sie verwenden/enthalten die JAR mit der domain-Objekte. Finden Sie hier eine konkrete (Basis -) Beispiel, das ich je schrieb.Setzen Sie Ihre Konfigurations-Klassen/Eigenschaften in einer jar-Datei und legen Sie, dass die jar-Datei in WEB-INF/lib. Dann können Sie auf Sie über die normalen classpath-Ressource-Einrichtungen, wo Sie brauchen, um in Ihre web-Anwendung.
Sollten Sie über eine statische Referenz zu diesen Eigenschaften, und greifen Sie auf diese Weise. Sie wird am Ende der Lektüre einmal in den Speicher, und halten Sie Sie dort. Auf diese Weise werden Sie nicht haben, um auf die Festplatte zuzugreifen, so viele Male während der Laufzeit.
So, angenommen, Sie haben eine Klasse
AppProperties
:Aus Ihrer Initialisierung des servlet rufen Sie
loadProperties
zu Lesen, die Eigenschaften von der Festplatte. Dann, in Ihrer Anwendung code, um die Eigenschaften zuzugreifen:AppProperties
Klasse, und nicht etwas, das erfordert, dass jede JEE Zeug. Sie können dann Ihr Gerät testensetup
Methode initialisiert die Eigenschaften, genau wie Ihre ServletContextListener normalerweise.Können Sie die JNDI verwenden, wenn Ihre app-server unterstützt.
Siehe meine Frage (und die Antwort) hier: Spring deployment-level configuration