Где разместить конфигурационный файл Spring?

18

Я хочу интегрировать Spring Framework в мой проект, особенно в сторону сервера.

Поэтому я не хочу помещать его в папку WEB-INF военного файла.

Должен ли я поместить applicationContext.xml в каждый слой (означает, что каждый проект разделен на отдельные проекты? (Службы, Домен и DAO)

Что такое хорошая практика?

Mik378
источник
2
Это может быть актуально: stackoverflow.com/questions/5967405/…
NoChance,

Ответы:

25

Структура файла Maven может помочь с этим

По сути, файлы конфигурации Spring (которые, кстати, могут иметь любое имя, а не только общее имя applicationContext.xml) обрабатываются как ресурсы classpath и хранятся в src/main/resources. В процессе сборки они затем копируются в WEB-INF/classesкаталог, который является нормальным местом для этих файлов.

Варианты включают в себя дополнительный springкаталог (например src/main/resources/spring), чтобы отделить контексты Spring от других ресурсов, предназначенных для каркасов приложений. Вы можете разделить контексты приложения на выделенные слои, такие как:

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

и так далее.

А как насчет различных сред, таких как dev / test / production?

Как правило, ваша конфигурация Spring должна подобрать конфигурацию среды из ее среды. Обычно это означает использование JNDI, JDBC, переменных среды или внешних файлов свойств для обеспечения необходимой конфигурации. Я перечисляю их в порядке предпочтения, поскольку JNDI, как правило, легче администрировать, чем внешние файлы свойств в управляемом производственном кластере.

В случае интеграционного тестирования вам может понадобиться использовать конфигурационный файл Spring «только для тестирования». Это будет содержать специальные контексты, которые используют тестовые компоненты или конфигурацию. Они будут присутствовать в каталоге src / test / resources и могут иметь test-префикс, чтобы убедиться, что разработчики знают о своей цели. Типичное использование - предоставление источника данных не-JNDI, возможно, предназначенного для базы данных HSQLDB во время автоматических тестов сборки, на который будут ссылаться в тестовом примере.

Однако, как правило, большинство ваших контекстных файлов Spring не должны нуждаться в специальной модификации, поскольку они перемещаются между уровнями. Должно быть так, что один и тот же артефакт сборки (например, файл WAR) используется в dev / test / production только с разными учетными данными.

Гэри Роу
источник
2

Ваш проект разделен на модули Maven? Если это так, вы можете добавить дополнительный модуль только для конфигурационных файлов. Давайте назовем это config-module

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

Такая конфигурация является предложением. Настройте свой собственный набор файлов. Упакуйте его как JAR и добавьте этот модуль как зависимость от любого другого модуля (web, lib для ear, еще один jar).

У вас будет доступ к ресурсам конфигурационного модуля (xml, свойствам и т. Д.), Поскольку они находятся в пути к классам.

пом веб-модуля

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

Затем используйте операторы импорта из внешних контекстных файлов Spring. Например

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />
LAIV
источник
Это была отличная идея! Я позволил себе добавить немного больше, потому что ваш пример «import resource» не работал для меня ...... Я все еще изучаю «фильтрацию» оператора import (основываясь на полном имени пакета) ... и я не работал этот сбой (для будущих читателей), чтобы отвлечь от этой великой идеи и ответа. Спасибо, Лайв!
granadaCoder
Одна из причин, по которой может произойти сбой при импорте «что, по моему мнению, должно работать», заключается в следующем: github.com/spring-projects/spring-framework/issues/16017
granadaCoder