2013-07-15 1 views
2

내 컨트롤러 중 하나의 PostConstruct에서 코드를 실행하려고합니다. 그러나이 동작은이 동일한 모듈의 다른 컨트롤러 하나가 다른 외부 모듈에 의해 트리거되도록하는 것과 같습니다. postConstruct의 코드가 실행될 때 다른 컨트롤러가 준비되지 않은 것을 관찰했습니다.Spring Context에서 모든 컨트롤러가 준비되면 이벤트를 트리거하는 방법은 무엇입니까?

또한 ContextRefreshed 및 ContextStarted 이벤트에서 ApplicationContext 수신기를 사용해 보았습니다.하지만 일부 외부 모듈이 연결하려고 시도 할 때 아직 모든 컨트롤러가 준비되지 않은 것 같습니다.

무엇이 누락 되었습니까? 모든 컨트롤러가 현재 모듈에 대해 준비가되었을 때 메서드 실행을 트리거 할 수있는 훅이 있습니까?

답변

3

이벤트는 기본 설정이 활성화되어 있지 않으면 LAZY 초기화를 사용하지 않는 한 새로 고쳐집니다.

정확한 컨텍스트 이벤트를 수신해야합니다. 두 개 (또는 그 이상)의 새로 고치기 이벤트가 있습니다. 하나는 루트 컨텍스트 용이고 다른 하나는 각 서블릿 컨텍스트 용입니다.

+0

ServletContextListener 및 ApplicationListener를 사용해 보았지만 외부 모듈에서 컨트롤러에 대한 요청이 그 시점에서 404 오류를 제공하고 있습니다. 당신이 제안하는 방법이 실제로 작동하고 있지만 서블릿 컨테이너는 이벤트 핸들러 자체가 작업을 완료 할 때까지 컨트롤러에 대한 요청을 차단하는 것처럼 보일 수 있습니다. 따라서 우리는 현재 현재 모듈의 컨트롤러에 접속하기 전에 외부 모듈의 일부 스레드 수면 지연에 의존하고 있습니다. – Atharva

+0

나는 당신이 당신의 질문에서 무엇을 요구하고 있는지 다른 것을하고 있다는 느낌이 들었다. "외부 모듈로부터의 요청"이란 무엇을 의미합니까? 애플리케이션 컨테이너가 서블릿이 완전히 초기화 될 때까지 요청을 처리하지 못하도록하는 것이 옳다. 그러나 이것이 당신의 질문과 어떻게 연결되어 있습니까? –

+0

컨트롤러를 초기화 한 후 실행하려는 코드가이 모듈에 즉시 연결되도록 일부 외부 응용 프로그램을 트리거합니다. – Atharva

관련 문제