Qual è il posto migliore per memorizzare un file di configurazione in un'applicazione Web Java (WAR)?


Creo un'applicazione web (WAR) e la distribuisco su Tomcat. Nella webapp c'è una pagina con un modulo in cui un amministratore può inserire alcuni dati di configurazione. Non voglio memorizzare questi dati in un DBMS, ma solo in un file XML sul file system. Dove metterlo?

Vorrei inserire il file da qualche parte nell'albero delle directory in cui è distribuita l'applicazione stessa. Il mio file di configurazione dovrebbe trovarsi nella directory WEB-INF ? O metterlo da qualche altra parte?

E qual è il codice Java da usare in un servlet per trovare il percorso assoluto della directory? O è possibile accedervi con un percorso relativo?

Author: informatik01, 2008-09-18

6 answers

Quello che facciamo è metterlo in una directory separata sul server (potresti usare qualcosa come /config, /opt/config, /root/config, /home/username/config, o qualsiasi cosa tu voglia). Quando i nostri servlet si avviano, leggono il file XML, ne ottengono alcune cose (soprattutto le informazioni sulla connessione DB), e il gioco è fatto.

Ho chiesto perché l'abbiamo fatto una volta.

Sarebbe bello memorizzare tutto nel DB, ma ovviamente non è possibile memorizzare le informazioni di connessione DB nel DB.

Potresti codificare le cose nel codice, ma è brutto per molte ragioni. Se le informazioni devono mai cambiare, devi ricostruire il codice e ridistribuire. Se qualcuno ottiene una copia del tuo codice o del tuo file WAR, otterrebbe tali informazioni.

Mettere le cose nel file WAR sembra bello, ma se vuoi cambiare molto le cose potrebbe essere una cattiva idea. Il problema è che se devi cambiare le informazioni, la prossima volta che ridistribuisci sovrascriverà il file in modo che tu non si ricordava di cambiare nella versione di essere integrato nella GUERRA viene dimenticato.

Il file in un posto speciale sul file system funziona abbastanza bene per noi. Non ha grandi aspetti negativi. Sai dove si trova, è memorizzato separatamente, rende facile la distribuzione su più macchine se hanno tutti bisogno di valori di configurazione diversi (dal momento che non fa parte della GUERRA).

L'unica altra soluzione a cui posso pensare che funzionerebbe bene sarebbe mantenere tutto nel DB tranne il login DB informazione. Ciò deriverebbe dalle proprietà del sistema Java che vengono recuperate tramite la JVM. Questa è la cosa API delle preferenze menzionata da Hans Doggen sopra. Non penso che fosse in giro quando la nostra applicazione è stata sviluppata per la prima volta, se lo era non è stato usato.

Per quanto riguarda il percorso per accedere al file di configurazione, è solo un file sul filesystem. Non è necessario preoccuparsi del percorso web. Quindi, quando il tuo servlet si avvia, apre semplicemente il file in " / config / myapp / config.xml " (o qualsiasi altra cosa) e troverà la cosa giusta. Solo hardcodeing il percorso per questo mi sembra abbastanza innocuo.

 48
Author: MBCook, 2008-09-18 20:15:24

WEB-INF è un buon posto per mettere il tuo file di configurazione. Ecco un po ' di codice per ottenere il percorso assoluto della directory da un servlet.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
 16
Author: Jataro, 2008-09-18 20:19:45

Inserendolo in WEB-INF nasconderà il file XML agli utenti che tentano di accedervi direttamente tramite un URL, quindi sì, direi di metterlo in WEB-INF.

 9
Author: Michael, 2008-09-18 20:29:48

Non lo memorizzerei nella cartella dell'applicazione, perché sovrascriverebbe la configurazione con una nuova distribuzione dell'applicazione.

Ti suggerisco di dare un'occhiata all'API Preferenze o scrivere qualcosa nella cartella utenti (l'utente che sta eseguendo Tomcat).

 5
Author: Hans Doggen, 2008-09-18 19:57:34

La risposta a questo dipende da come si intende leggere e scrivere quel file di configurazione.

Ad esempio, il framework Spring ti dà la possibilità di utilizzare i file di configurazione XML (o file di proprietà Java); questi possono essere memorizzati nel tuo classpath (ad esempio, nella directory WEB-INF), in qualsiasi altro luogo sul filesystem o anche in memoria. Se si dovesse usare Spring per questo, il posto più semplice per memorizzare il file di configurazione è nella directory WEB-INF, quindi utilizzare Spring ClassPathXmlApplicationContext classe per accedere al file di configurazione.

Ma ancora una volta, tutto dipende da come si prevede di accedere a quel file.

 3
Author: delfuego, 2008-09-18 19:57:38

Se è la tua configurazione personalizzata WEB-INF è un buon posto per questo. Ma alcune librerie potrebbero richiedere che le configurazioni risieda in WEB-INF / classes.

 1
Author: axk, 2008-09-18 19:58:21