2012-11-15 6 views
0

필요할 때만 스프링 애플리케이션 컨텍스트를로드 할 수 있습니까? 시나리오는 다음과 같습니다. 사용자가 데이터베이스 속성을 입력 할 수있는 설정 페이지가있는 웹 응용 프로그램이 있습니다. 그것들은 속성 파일 내에 저장되고 설정 후에 다시 시작될 때 Spring PropertyPlaceHolderConfigurer와 함께 application-context.xml에로드됩니다.요청시 스프링 컨텍스트 로딩

그러나 유효한 초기 데이터베이스 정보가 없으면 스프링이 시작되지 않습니다. 따라서 설정 페이지가 나타나지 않습니다. 컨텍스트를로드하지 못하도록하는 명확한 방법이 있습니까?

내 마음에 떠오르는 한 가지 해결책은 web.xml에서 컨텍스트 리스너를 제거하고 설정 후에 다시 작성하는 것입니다. 그러나 이것은 깨끗한 해결책보다는 다소 고약한 해킹입니다.

답변

3

그냥 ... 시작하지 마세요. 내 생각에 당신은 스프링을 web.xml에서 부트 스트래핑하는 것 같습니다. ContextLoaderListener을 넣지 마십시오 (또는 설정 페이지를 간신히 표시하기 위해 최소한의 컨텍스트를 지정하십시오).

일단 설정이 끝나면 Spring 컨텍스트를 시작 (및 중지)해야합니다. 아주 간단합니다. 코드에서 Spring을 시작할 수 있습니다. ClassPathXmlApplicationContext을 사용하십시오.

0

이것에 대해 잠시 생각 후, 나는 다음과 같은 접근 방식을 갈 것이다 :

혼자의 web.xml을 떠나 그냥 클라이언트가 그들에게 위임에 스프링 클래스를 대체. 그래서 내 경우에는 이것은

protected class OnDemandContextLoaderListener extends ContextLoaderListener { 
    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     // some logic to find out if properly setup 
     // if so: 
     super.contextInitialized(event): 
    } 
... 
} 

도뿐만 아니라 DispatcherServlet에 작업을해야 할 것이다.

관련 문제