Onde colocar o arquivo de configuração do Spring?


18

Quero integrar o framework Spring no meu projeto, especialmente no lado do servidor.

Portanto, não quero colocá-lo na pasta WEB-INF do arquivo war.

Devo colocar um applicationContext.xml em cada camada (significa que cada projeto foi dividido em projetos distintos? (Serviços, Domínio e DAO)

Qual é a boa prática?


Respostas:


25

A estrutura do arquivo Maven pode ajudar com isso

Em essência, os arquivos de configuração do Spring (que podem ter qualquer nome a propósito, não apenas o genérico applicationContext.xml) são tratados como recursos do caminho de classe e arquivados em src/main/resources. Durante o processo de compilação, eles são copiados para o WEB-INF/classesdiretório que é o local normal para esses arquivos terminarem.

As variações incluem um springdiretório adicional (por exemplo src/main/resources/spring) para separar os contextos do Spring de outros recursos dedicados às estruturas de aplicativos. Você pode dividir os contextos do aplicativo em camadas dedicadas, como:

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

e assim por diante.

E quanto a diferentes ambientes, como desenvolvimento / teste / produção?

Normalmente, sua configuração do Spring deve pegar a configuração do ambiente em seu ambiente. Geralmente, isso significa usar JNDI, JDBC, variáveis ​​de ambiente ou arquivos de propriedades externas para fornecer a configuração necessária. Listo aqueles na ordem de preferência, já que geralmente é mais fácil administrar o JNDI do que arquivos de propriedades externas em um cluster de produção controlado.

No caso de teste de integração, pode ser necessário usar um arquivo de configuração do Spring "somente teste". Isso conteria contextos especiais que usam beans de teste ou configuração. Eles estariam presentes em src / test / resources e podem ter um test-prefixo para garantir que os desenvolvedores estejam cientes de sua finalidade. Um uso típico seria fornecer um DataSource não JNDI, talvez direcionado a um banco de dados HSQLDB durante os testes automatizados de construção e seria referenciado no caso de teste.

No entanto, em geral, a maioria dos arquivos de contexto do Spring não precisa de modificação especializada, pois eles se movem entre as camadas. Deve acontecer que o mesmo artefato de construção (por exemplo, arquivo WAR) seja usado no dev / test / production apenas com credenciais diferentes.


2

Seu projeto está dividido nos módulos Maven? Nesse caso, você pode adicionar um módulo extra apenas para arquivos de configuração. Vamos chamá-lo de config-module

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

Essa configuração é uma sugestão. Configure seu próprio conjunto de arquivos Empacote-o como um JAR e inclua este módulo como dependência de qualquer outro módulo (web, ear's lib, outro jar).

Você terá acesso aos recursos do módulo de configuração (xml, propriedades etc.) porque eles estão no caminho de classe.

pom do módulo da web

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

Em seguida, use instruções de importação de arquivos de contexto externos do Spring. Por exemplo

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

Esta foi uma ótima idéia! Tomei a liberdade de adicionar um pouco mais, porque o seu exemplo "recurso de importação" não estava funcionando para mim ...... ainda estou aprendendo a "filtragem" da instrução de importação (com base no nome completo do pacote) ... e não trabalhei com esse soluço (para futuros leitores) para distrair-me dessa ótima idéia e resposta. Obrigado Laiv!
granadaCoder 23/02

Uma das razões pelas quais sua importação "o que eu acho que deve funcionar" pode estar falhando é por causa desse bug: github.com/spring-projects/spring-framework/issues/16017
granadaCoder
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.