Dove mettere il file di configurazione di Spring?


18

Voglio integrare il framework Spring nel mio progetto soprattutto nel lato server.

Quindi, non voglio inserirlo nella cartella WEB-INF del file di guerra.

Devo inserire un applicationContext.xml in ogni livello (significa che ogni progetto è diviso in progetti distinti? (Servizi, Dominio e DAO)

Qual è la buona pratica?


2
Questo può essere rilevante: stackoverflow.com/questions/5967405/...
NoChance

Risposte:


25

La struttura del file Maven può essere d'aiuto in questo

In sostanza, i file di configurazione di Spring (che possono avere qualsiasi nome, non solo quelli generici applicationContext.xml) sono trattati come risorse del percorso di classe e archiviati in src/main/resources. Durante il processo di compilazione, questi vengono quindi copiati nella WEB-INF/classesdirectory che è il luogo normale in cui questi file finiscono.

Le varianti includono una springdirectory aggiuntiva (ad es. src/main/resources/spring) Per separare i contesti Spring da altre risorse dedicate ai framework applicativi. Potresti voler dividere i contesti dell'applicazione in livelli dedicati come:

example-servlet.xml
example-data.xml
example-security.xml

e così via.

Che dire di diversi ambienti come sviluppo / test / produzione?

In genere, la configurazione di Spring dovrebbe raccogliere la configurazione dell'ambiente dal suo ambiente. Di solito questo significa utilizzare JNDI, JDBC, variabili di ambiente o file di proprietà esterne per fornire la configurazione necessaria. Elenco quelli in ordine di preferenza poiché JNDI è generalmente più facile da amministrare rispetto ai file delle proprietà esterne in un cluster di produzione controllata.

In caso di test di integrazione potrebbe essere necessario utilizzare un file di configurazione Spring "solo test". Ciò conterrebbe contesti speciali che utilizzano bean di test o configurazione. Questi sarebbero presenti sotto src / test / resources e potrebbero avere un test-prefisso per assicurarsi che gli sviluppatori siano consapevoli del loro scopo. Un uso tipico sarebbe quello di fornire un DataSource non JNDI, magari destinato a un database HSQLDB durante i test automatici di compilazione, e farebbe riferimento nel caso di test.

Tuttavia, in generale la maggior parte dei file di contesto Spring non dovrebbe richiedere modifiche specializzate mentre si spostano tra i livelli. Dovrebbe essere il caso che lo stesso artefatto di compilazione (ad es. File WAR) venga utilizzato in dev / test / production solo con credenziali diverse.


2

Il tuo progetto è suddiviso in moduli Maven? In tal caso, puoi aggiungere un modulo aggiuntivo solo per i file di configurazione. Chiamiamolo modulo di configurazione

config-module
      |
      |--> src\main\resources\config\spring\applicationContex.xml
      |--> src\main\resources\config\properties\application.properties
      |--> pom.xml

Tale configurazione è un suggerimento. Imposta il tuo set di file Crea un pacchetto come un JAR e aggiungi questo modulo come dipendenza di qualsiasi altro modulo (web, ear's lib, altro jar).

Avrai accesso alle risorse del modulo di configurazione (xml, proprietà, ecc.) Perché si trovano nel percorso di classe.

pom del modulo web

<dependency>
    <groupId>com.myproject.group</groupId>
    <artifactId>config-module</artifactId>
</dependency>

Quindi utilizzare le istruzioni di importazione da file di contesto Spring esterni. Per esempio

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />

Questa è stata una grande idea! Mi sono preso la libertà di aggiungere un piccolo extra perché il tuo esempio di "risorsa di importazione" non funzionava per me ...... Sto ancora imparando il "filtraggio" della dichiarazione di importazione (basato sul nome completo del pacchetto) ... e non ho lavorato con quel singhiozzo (per i futuri lettori) per distrarre da questa grande idea e risposta. Grazie Laiv!
granadaCoder

Uno dei motivi per cui l'importazione di "quello che penso dovrebbe funzionare" potrebbe non riuscire a causa di questo errore: github.com/spring-projects/spring-framework/issues/16017
granadaCoder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.