spring 컨 텍스트 중복 로드 된 문제 기록
이 렇 습 니 다. 프로젝트 가 시 작 될 때 스 캔 작업 을 시작 하고 스 캔 작업 을 수행 해 야 합 니 다. 일반적인 작업 이 아니 기 때문에 quartz 를 고려 하지 않 고 이 기능 을 완성 하려 면 여러 가지 실현 방법 이 있 습 니 다. 예 를 들 어:
1. 사용자 정의 모니터
public class StartupListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
ApplicationContext cxt = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
Scanner scanner = (Scanner) ctx.getBean("scanner ");
scanner.start();
}
}
<listener>
<listener-class>com.blablah.StartupListener</listener-class>
</listener>
2. spring InitialingBean 인터페이스 구현
@Component
public class ScanTask implements InitializingBean {
@Autowired private Scanner scanner;
public void afterPropertiesSet() throws Exception {
scanner.start();
}
}
프로젝트 가 시 작 된 후에 스 캔 스 레 드 가 두 번 시 작 된 것 을 발 견 했 습 니 다. 즉, 두 개의 Scanner 인 스 턴 스 가 실행 되 고 있 습 니 다. 이 로 인해 데이터 가 혼 란 스 러 웠 습 니 다. 이때 웹 xml 설정 은 다음 과 같 습 니 다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml </param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
이 문 제 를 일 으 킨 이 유 는 spring 의 ContextLoader Listener 와 springmvc 의 Dispatcher Servlet 가 시작 할 때 spring 컨 텍스트 를 반복 적 으로 불 러 왔 기 때 문 입 니 다. 인터넷 에 도 많은 제안 방안 이 있 습 니 다. 예 를 들 어:
Spring MVC – Beans loaded twice:http://www.mkyong.com/spring-mvc/spring-mvc-beans-loaded-twice
Spring - application Initialized twice? :
http://stackoverflow.com/questions/20704086/spring-application-initialized-twice
그러나 이들 의 건 의 를 시도 한 후에 도 문 제 는 해결 되 지 않 았 다.컨 텍스트 를 불 러 오 는 것 이 목적 이 라면 하 나 를 시작 하면 되 지 않 습 니까? 웹. xml 을 수정 하고 Dispatcher Servlet 을 사용 하여 spring 과 springmvc 컨 텍스트 정 보 를 불 러 오 면 문제 가 해결 되 었 습 니 다.
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.