it-swarm.com.de

Was ist der beste Ort, um eine Konfigurationsdatei in einer Java Web Application (WAR)) zu speichern?

Ich erstelle eine Webanwendung (WAR) und stelle sie auf Tomcat bereit. In der webapp gibt es eine Seite mit einem Formular, auf der ein Administrator einige Konfigurationsdaten eingeben kann. Ich möchte diese Daten nicht in einem DBMS speichern, sondern nur in einer XML-Datei im Dateisystem. Wo soll ich es hinstellen?

Ich möchte die Datei irgendwo im Verzeichnisbaum ablegen, in dem die Anwendung selbst bereitgestellt wird. Sollte sich meine Konfigurationsdatei im Verzeichnis WEB-INF befinden? Oder woanders hinstellen?

Und wie lautet der in einem Servlet zu verwendende Java) - Code, um den absoluten Pfad des Verzeichnisses zu ermitteln, oder kann mit einem relativen Pfad darauf zugegriffen werden?

55
boes

Wir legen es in einem separaten Verzeichnis auf dem Server ab (Sie können beispielsweise Folgendes verwenden:/config,/opt/config,/root/config,/home/benutzername/config oder alles, was Sie möchten). Wenn unsere Servlets gestartet werden, lesen sie die XML-Datei, holen ein paar Dinge daraus heraus (vor allem DB-Verbindungsinformationen) und das wars.

Ich habe gefragt, warum wir das einmal gemacht haben.

Es wäre schön, alles in der DB zu speichern, aber Sie können natürlich keine DB-Verbindungsinformationen in der DB speichern.

Sie könnten Dinge im Code fest codieren, aber das ist aus vielen Gründen hässlich. Wenn sich die Informationen ändern müssen, müssen Sie den Code neu erstellen und erneut bereitstellen. Wenn jemand eine Kopie Ihres Codes oder Ihrer WAR-Datei erhält, erhält er diese Informationen.

Das Einfügen von Dingen in die WAR-Datei ist nett, aber wenn Sie Dinge stark ändern möchten, ist dies möglicherweise eine schlechte Idee. Das Problem ist, dass, wenn Sie die Informationen ändern müssen, diese beim nächsten erneuten Bereitstellen überschrieben werden, sodass alles, was Sie in der in WAR integrierten Version nicht vergessen haben, vergessen wird.

Die Datei an einem bestimmten Ort im Dateisystem funktioniert für uns ganz gut. Es hat keine großen Nachteile. Sie wissen, wo es sich befindet, es ist separat gespeichert und erleichtert die Bereitstellung auf mehreren Computern, wenn alle unterschiedliche Konfigurationswerte benötigen (da es nicht Teil der WAR ist).

Die einzige andere Lösung, von der ich mir vorstellen kann, dass sie gut funktionieren würde, wäre, alles in der DB zu behalten, außer die DB-Anmeldeinformationen. Das würde von Java Systemeigenschaften kommen, die über die JVM abgerufen werden. Dies ist die von Hans Doggen oben erwähnte Preferences API-Sache es wurde nicht benutzt.

Der Pfad für den Zugriff auf die Konfigurationsdatei ist nur eine Datei im Dateisystem. Sie müssen sich keine Sorgen um den Webpfad machen. Wenn Ihr Servlet gestartet wird, öffnet es einfach die Datei "/config/myapp/config.xml" (oder was auch immer) und findet das Richtige. Es scheint mir ziemlich harmlos, nur den Pfad für diesen Pfad fest einzuschreiben.

48
MBCook

WEB-INF ist ein guter Ort, um Ihre Konfigurationsdatei abzulegen. Hier ist ein Code, um den absoluten Pfad des Verzeichnisses von einem Servlet abzurufen.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
16
Jataro

Wenn Sie es in WEB-INF Eingeben, wird die XML-Datei vor Benutzern verborgen, die versuchen, über eine URL direkt darauf zuzugreifen. Ich würde also sagen, Sie müssen es in WEB-INF Eingeben.

9
Michael

Ich würde es nicht im Anwendungsordner speichern, da dies die Konfiguration bei einer neuen Bereitstellung der Anwendung überschreiben würde.

Ich schlage vor, Sie werfen einen Blick auf die Einstellungen-API oder schreiben etwas in den Benutzerordner (den Benutzer, auf dem Tomcat ausgeführt wird).

5
Hans Doggen

Die Antwort darauf hängt davon ab, wie Sie diese Konfigurationsdatei lesen und schreiben möchten.

Mit dem Spring Framework können Sie beispielsweise XML-Konfigurationsdateien verwenden (oder Java Eigenschaftendateien); diese können in Ihrem Klassenpfad gespeichert werden (z. B. in der WEB-INF-Verzeichnis), irgendwo anders im Dateisystem oder sogar im Speicher Wenn Sie Spring dafür verwenden, ist der einfachste Ort zum Speichern der Konfigurationsdatei Ihr WEB-INF-Verzeichnis, und verwenden Sie dann Spring's ClassPathXmlApplicationContext Klasse, um auf Ihre Konfigurationsdatei zuzugreifen.

Aber auch hier hängt alles davon ab, wie Sie auf diese Datei zugreifen möchten.

3
delfuego

Wenn es Ihre benutzerdefinierte Konfiguration ist, ist WEB-INF ein guter Ort dafür. Für einige Bibliotheken ist jedoch möglicherweise eine Konfiguration in WEB-INF/classes erforderlich.

1
axk