Konfigurationsdateien für eine Webanwendung - einmal laden und wo speichern?

8

Ich habe eine Reihe von Eigenschaften (Konfigurationen), die sich je nach Umgebung ändern können. Diese Werte ändern sich jedoch nicht, sobald die Webanwendung implementiert ist. Beachten Sie, dass es eine Datei application.properties gibt, die ich während des normalen Programmablaufs häufig lesen möchte.

Ich weiß, dass ich diese wahrscheinlich beim Serverstart laden kann. Was ist jedoch die beste Vorgehensweise, um diese aus einfachen Java-Klassen im Backend zu erreichen? Diese Business-Klassen haben nichts mit Servlets usw. zu tun und sind nicht abhängig von einer Webapp.

Also lade ich heute die Eigenschaften über einen ServletContext. Dann was? Wo sollte ich sie aufbewahren, um anderen Objekten leicht zugänglich zu sein, ohne erneut eine fileInputStream.load-Datei erstellen zu müssen?

Danke.

    
Kapsh 30.06.2010, 21:59
quelle

4 Antworten

12

Implementieren Sie eine ServletContextListener .

Hier ist ein grundlegendes Kickoff-Beispiel:

%Vor%

, die Sie wie folgt in web.xml registrieren:

%Vor%

und auf die Sie in Ihren Servlets wie folgt zugreifen können:

%Vor%

Nach einem zweiten Gedanken sind diese Eigenschaften also zu 100% spezifisch für Business-Layer, nicht für die Webapplikation selbst? Dann ist ein ServletContextListener tatsächlich ungeschickt und zu eng gekoppelt. Geben Sie der Business-Schicht eine eigene Config -Klasse, die die Eigenschaften aus dem Klassenpfad lädt und in einer static -Variable speichert ( Map<String, Properties> vielleicht?).

    
BalusC 30.06.2010, 22:15
quelle
1

Legen Sie Ihre Konfigurationsklassen / Eigenschaften in eine JAR-Datei und legen Sie diese JAR-Datei in WEB-INF / lib ab. Dann können Sie auf sie über die normalen Klassenpfad-Ressourcen zugreifen, wo immer Sie in Ihrer Webanwendung benötigen.

    
quelle
1

Sie sollten einen statischen Verweis auf diese Eigenschaften haben und auf diese Weise darauf zugreifen. Du wirst sie am Ende einmal in den Speicher einlesen und dort aufbewahren. Auf diese Weise müssen Sie nicht zur Laufzeit so oft auf die Festplatte zugreifen.

Angenommen, Sie haben eine Klasse AppProperties :

%Vor%

In Ihrem Initialisierungs-Servlet würden Sie loadProperties aufrufen, um die Eigenschaften von der Festplatte zu lesen. Dann greifen Sie in Ihrem Anwendungscode auf die Eigenschaften zu:

%Vor%     
pkaeding 30.06.2010 22:16
quelle
0

Sie können JNDI verwenden, wenn Ihr App-Server dies unterstützt.

Siehe meine Frage (und die Antwort) hier: Konfiguration der Spring-Deployment-Ebene

    
Robert Wilson 01.07.2010 12:59
quelle

Tags und Links