잠시 동안 검색했지만 내 문제에 대한 적절한 해결책을 찾을 수 없습니다.스프링 웹 앱. 하나의 전쟁 다중 응용 프로그램 컨텍스트
하나의 WAR 웹 응용 프로그램이 있고 웹 응용 프로그램 용으로 2 개의 스프링 응용 프로그램을 실행하고 싶습니다. 하나는 예약 된 작업을 실행하는 응용 프로그램입니다. 두 응용 프로그램은 많은 빈을 공유하므로이 두 응용 프로그램이 일부 빈 인스턴스를 공유하고 싶습니다.
내가 내 컨텍스트를 분할하고 싶습니다:
-shared-context.xml에
-web-context.xml에
-task-context.xml에
웹 컨텍스트 및 작업 컨텍스트해야 고립되어 서로를 보지 못한다. 그들은 동일하지만 구성이 다른 몇 개의 빈을 생성해야합니다.
이것이 가능합니까? 어떻게해야합니까?
는 둘 다 웹 환경 및 작업 환경에서<import resource="classpath:shared-context.xml" />
을 넣어 및
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>web-context.xml task-context.xml</param-value>
</context-param>
로 내 web.xml 파일을 구성하는 첫번째 시도했지만 문제는 웹과 작업 사이에 분리가 없다는 것입니다. 그들은 모두 주 모든 콩도 웹의 context.xml 및 작업-context.xml에 정의 된 하나의 정보에 대한
여기 내 web.xml 파일입니다 :
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/web-context.xml /WEB-INF/task-context.xml</param-value>
</context-param>
<!-- Listeners -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.gwtrpcspring.RemoteServiceDispatcher</servlet-class>
</servlet>
<servlet>
<servlet-name>contentDownloadServlet</servlet-name>
<servlet-class>ch.olator.servlet.MyContentDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.rpc</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>contentDownloadServlet</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
... some irrelevant filters ...
</web-app>
업데이트
- 상황을 더 명확하게하기 위해 웹 컨텍스트에 있지만 다르게 정의 된 빈을 정의하기 위해 예약 된 작업을 실행하는 데 사용되는 작업 컨텍스트가 있기 때문에 작업과 웹 사이의 격리가 필요합니다. 예 : 웹 컨텍스트에있는 범위가 지정된 세션 bean이 있지만 스케줄 된 태스크가 범위 세션 bean을 사용할 수 없으므로 태스크에 대해 다르게 정의해야합니다.
당신에서 누락 된 부분은 무엇을 web.xml에있다? 또한 하나의 응용 프로그램, 몇 개의 XML 파일 또는 컨텍스트가 중요하지 않은지 여전히 파악할 수 있습니다. 일반적으로 당신은 이미 'ContextLoaderListener'와 'DispatcherServlet'의 두 컨텍스트를 가져야합니다. 'ContextLoaderListener'는 'DispathcerServlet'의 부모 역할을합니다. 게시 된 web.xml에는 'ContextLoaderListener'의 컨텍스트 하나만 있습니다. 가지고있는 XML 파일의 수는 중요하지 않습니다. –
누락 된 일부는 무의미한 서블릿 필터입니다. 나는 같은 웹 context.xml에 모든 것을 넣는 데 사용한 다른 컨텍스트 파일이 없습니다. (아마도 적절한 방법이 아닙니다) Dispatcher 서블릿과 contentDownloadServlet이 모든 빈을 공유하기를 원합니다. Dispatcher 서블릿과 contentDownloadServlet간에 서로 다른 컨텍스트를 분리하고 싶지 않습니다. –
Ok. 그러나 얼마나 많은 XML 파일을 가지고 있더라도 하나의 컨텍스트 만 가질 수 있습니다. 그래서 당신이 원하는 것은 이미 그랬을 것입니다 ... 당신의 파일은 두 번로드되지 않습니다, 두 번 파싱 될지도 모르지만 그것은 다른 것입니다. 콩은 동일합니다. –