Java Spring Scheduler 중복실행

얼마전에 STS(Spring Tool Suite)에서 스케줄러를 사용하는 방법에 대해서 알아보았습니다. 필요하신 분은 아래 링크를 클릭하시면 보실 수 있습니다.

<== STS 서버 배포 및 스케쥴러 사용 ==>

개발 할 때 (개발자 Local PC)는 잘 작동하던것이 테스트서버나 운영서버에 올리면 중복해서 스케줄러가 실행되는 중복 현상이 발생하였습니다.


이런 경우들 많으시줘~
개발할때는 잘되던것이 환경적인 문제로 인하여 오류가 나는 경우, 아~ 생각만으로도 머리가 아픕니다. 이런 환경적인 문제 해결이 제일 까다로우니까요...ㅠ
오늘은 Java Spring Scheduler 중복실행 이럴때의 해결 방법에 대해서 알아보겠습니다.




두가지의 해결 방법이 있는데요. 두가지 다 알아보겠습니다. (서버 환경은 Spring + tomcat 입니다.)

▶ 첫번째 Tomcat 환경 설정으로 해결


C:\apache-tomcat-7.0.59\conf 폴더 하위에 server.xml 파일이 있습니다.
해당 server.xml 파일을 열어보면 Host 쪽에 docBase, appBase가 아래와 같이 잡혀있을덴데요.

<Host name="localhost" appBase="C:\apache-tomcat-7.0.59\webapps"
    unpackWARs="true" autoDeploy="false"
    xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="C:\apache-tomcat-7.0.59\webapps/project" reloadable="false" />
< /Host>

* 참고 : Host의 appBase는 여러 webapp들이 들어가는 부모 디렉토리이며, Context의 docBase는 실제로 동작하는 프로젝트의 디렉토리 입니다.




위의 Host 부분을 아래와 같이 바꿔주시면 Tomcat 환경 설정으로 중복실행되는 스케줄러를 해결 할 수 있습니다.

<Host name="localhost" appBase=""
    unpackWARs="true" autoDeploy="false"
    xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="C:\apache-tomcat-7.0.59\webapps/project" reloadable="false" />
< /Host>


▶ 두번째 방법으로 Spring 환경 설정으로 해결


Spring의 web.xml에서 설정된 ContextLoader의 중복 문제로서 웹시스템(개발하고있는 웹시스템)에서 Listener or Servlet이 둘 이상 등록될 때 하나의 context정보 파일을 두번 이상 호출하는 경우에 발생합니다.

이것은 환경설정을 할 때 잘못 설정한 것으로 운영상에 문제가 되지 않지만 스케줄러 작업에는 문제가 되므로 web.xml에 있는 contextLoading 설정을 ContextLoaderListener 또는 DispatcherServler 로 로딩하시면 됩니다.

* 참고 스케줄을 만들때 onApplicationEvent 함수에서 스케줄을 생성하면 Spring에서 시스템 초기화를 할 때 root context 초기화, servlet context 초기화를 시키기 때문에 중복해서 발생 합니다.




root context와 servlet context는 부모와 자식의 관계로 ApplicationEvent가 발생하면 root context에 등록된 자식의 servlet context도 발생하여 생기는 현상도 있습니다.
이는 ApplicationEvent에 조건문을 걸어 root context인지 servlet context인지를 구분하여 코드를 작성하면 해결 됩니다.

이상으로 Java Spring Scheduler 중복실행에 대해서 알아보았습니다.
오늘도 행복한 하루 되세요~~~^^

댓글

이 블로그의 인기 게시물

껌 떼는 법 (완벽 제거)

인성검사 팁 (인성검사 합격)

[엑셀] 셀에 수식 적용하는 모든 것 완벽 정리