Spring 설정 파일을 어디에 둘 것인가?


18

내 프로젝트의 Spring 프레임 워크를 특히 서버 측에 통합하고 싶습니다.

따라서 WEB-INF 폴더의 war 파일에 넣고 싶지 않습니다.

applicationContext.xml을 각 레이어에 넣어야합니까 (개별 프로젝트로 나눈 이후 각 프로젝트를 의미합니까? (서비스, 도메인 및 DAO)

좋은 습관은 무엇입니까?


2
이것은 관련이있을 수 있습니다 : stackoverflow.com/questions/5967405/…
NoChance

답변:


25

메이븐 파일 구조는 이것으로 도움이 될 수 있습니다

본질적으로 Spring 구성 파일 (generic뿐만 아니라 어떤 이름도 가질 수 있음 applicationContext.xml)은 클래스 경로 리소스로 취급되며 아래에 정리됩니다 src/main/resources. 그런 다음 빌드 프로세스 중에 WEB-INF/classes이러한 파일이 정상적인 디렉토리 인 디렉토리 로 복사됩니다 .

변형에는 스프링 컨텍스트를 애플리케이션 프레임 워크 전용의 다른 리소스와 분리하기 위한 추가 spring디렉토리 (예 :)가 포함됩니다 src/main/resources/spring. 응용 프로그램 컨텍스트를 다음과 같은 전용 계층으로 분할 할 수 있습니다.

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

등등.

dev / test / production과 같은 다른 환경은 어떻습니까?

일반적으로 Spring 구성은 환경에서 환경 구성을 선택해야합니다. 일반적으로 이는 JNDI, JDBC, 환경 변수 또는 외부 특성 파일을 사용하여 필요한 구성을 제공함을 의미합니다. JNDI가 일반적으로 제어 된 프로덕션 클러스터의 외부 특성 파일보다 관리하기 쉽기 때문에 선호하는 순서대로 나열합니다.

통합 테스트의 경우 "테스트 전용"스프링 구성 파일을 사용해야합니다. 여기에는 테스트 Bean 또는 구성을 사용하는 특수 컨텍스트가 포함됩니다. 이것들은 src / test / resources에 존재 test-하며 개발자들이 자신의 목적을 인식하도록하기 위해 접두사를 가질 수 있습니다 . 일반적으로 빌드 자동화 테스트 중에 HSQLDB 데이터베이스를 대상으로하는 비 JNDI DataSource를 제공하고 테스트 케이스 내에서 참조하는 것이 일반적입니다.

그러나 일반적으로 대부분의 Spring 컨텍스트 파일은 계층간에 이동할 때 특수한 수정이 필요하지 않습니다. 동일한 빌드 아티팩트 (예 : WAR 파일)가 다른 자격 증명을 사용하여 dev / test / production에서 사용되는 경우입니다.


2

프로젝트가 Maven 모듈로 분할되어 있습니까? 그렇다면 구성 파일에 대해서만 추가 모듈을 추가 할 수 있습니다. 그것을 구성 모듈 이라고 부를 수 있습니다

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

이러한 구성은 제안입니다. 자체 파일 세트 설정 JAR 처럼 패키징 하고이 모듈을 다른 모듈 (웹, ear 's lib, 다른 jar)의 종속성으로 추가하십시오.

구성 모듈 리소스 (xml, 속성 등)는 클래스 경로에 있으므로 액세스 할 수 있습니다 .

웹 모듈의 폼

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

그런 다음 외부 Spring 컨텍스트 파일에서 import 문을 사용 하십시오. 예를 들어

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

이것은 좋은 생각이었습니다! 귀하의 예제 "import resource"가 작동하지 않기 때문에 약간의 추가가 자유 로워졌습니다 ... 나는 여전히 전체 패키지 이름을 기반으로 import 문의 "필터링"을 배우고 있습니다 ... 나는 그 미래의 독자들을위한이 딸꾹질이이 위대한 생각과 대답을 방해하지 않도록 노력하지 않았습니다. 고마워 Laiv!
granadaCoder

"작동해야하는 것"가져 오기가 실패하는 이유 중 하나는이 버그 때문입니다. github.com/spring-projects/spring-framework/issues/16017
granadaCoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.