복붙노트

[SPRING] Jar의 여러 XML 파일을 사용하는 Spring ApplicationContext

SPRING

Jar의 여러 XML 파일을 사용하는 Spring ApplicationContext

현재 Maven 빌드의 "main"applicationContext-a.xml을 사용하여 ApplicationContext를 만들어야합니다. 다른 하나는 다른 Maven 빌드의 클래스를 연결하고 Maven 의존성에 포함 된 jar 파일에 미리 설정되어 있습니다.

여기 아이디어 :

ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
                "classpath*:applicationContext-*.xml"});

동일한 Project에 있기 때문에 클래스 경로에서 applicationContext-a.xml을로드해야합니다. 이 작동합니다.

그런 다음 applicationContext-b.xml을 dependency-jar에서로드해야합니다. 이것은 작동하지 않습니다.

유의 사항

"classpath*:applicationContext-*.xml"

직접 클래스 패스 내부의 XML 만 일치하며 항아리 내부에는 없습니다.

내가 발견 한 것 :

ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
                "classpath*:applicationContext-*.xml", "classpath*:applicationContext-b.xml"});

이것은 작동하지만, jar 파일 내부의 xml 파일명을 명시 적으로 알려줄 수있는 경우에만 : applicationContext-b.xml

또한 통합 테스트를 위해이 기능이 필요합니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"**/applicationContext*.xml"})
public class TestClass { ... }

가장 좋은 아이디어는 커스텀 로더일까요? 패턴 작동을 얻는 방법이 있어야합니다 ...

얼마 전에 솔루션이 있었는데, 이것은 다른 방식으로 작동합니다. 단지 jar에서 applicationContext.xml 만 가져옵니다. 클래스 패스 안에 다른 사람이 있으면이 파일에서만 일치합니다.

해결법

  1. ==============================

    1.classpath * : 루트 폴더 아래의 파일에는 제한이 있다고 생각합니다. Spring / application-a.xml 및 spring / application-b.xml과 같은 폴더 아래에서 파일을 이동하십시오. 그런 다음 경로 클래스 경로 * : / spring / application - *. xml을 가질 수 있습니다.

    classpath * : 루트 폴더 아래의 파일에는 제한이 있다고 생각합니다. Spring / application-a.xml 및 spring / application-b.xml과 같은 폴더 아래에서 파일을 이동하십시오. 그런 다음 경로 클래스 경로 * : / spring / application - *. xml을 가질 수 있습니다.

  2. from https://stackoverflow.com/questions/10523945/spring-applicationcontext-with-multiple-xml-files-from-jar by cc-by-sa and MIT license