2018년 9월 11일 화요일

Spring 어플리케이션을 톰캣에 배포 하였을때 schedule 이 중복 실행 되는 현상

톰캣에 Spring 어플리케이션을 배포해서 서비스 하는 경우 schedule 이 중복되어 실행 되는 현상이 발생하는 경우가 있습니다.

이런 경우는 보통 어플리케이션이 이중으로 로딩되어 발생하는 현상입니다.

tomcat 의  server.xml 설정시에 Host 설정에 appBase 속성을  설정하고 배포한 어플리케이션을  appBase 폴더 아래에 위치 시켜서 Context 설정을 하게 되면 Tomcat 이 어플리케이션을 이중으로 로딩하게 됩니다.

아래와 같이 server.xml 을 설정 하게 되면  배포한 appTest 어플리케이션이
Host의 appbase 설정에 따라서 /appTest 로 배포 하고
또 context  설정에 따라서 /로 배포 하게 되어 이중으로 로딩하는 문제가 발생 하게 됩니다.

    <Host name="localhost"  appBase="/home/user/tomcat/webapps" unpackWARs="true" autoDeploy="false" >
        <Context path="/appTest" docBase=“app1" reloadable="true" />
    </Host>

이런 경우 소스를 appbase 아래가 아닌 다른곳에 설치 하거나 host 속성에 기동시에 appbase 아래의 어플리케이션을 배포 하지 않도록 아래 처럼 deployOnStartup 을 false로 설정을 해주면 됩니다.

    <Host name="localhost"  appBase="/home/user/tomcat/webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
        <Context path="/appTest" docBase=“app1" reloadable="true" />
    </Host>

댓글 3개:

  1. 참고해서 문제 해결했습니다. 감사합니다.

    답글삭제
  2. 덕분에 문제 해결했어요 감사합니다!

    답글삭제
  3. 저도 이글보고 해결하는데 도움을 받았습니다.
    추가로 작성자님과 같이 autoDeploy 옵션도 false로 주셔야합니다.
    저는 autoDeploy 옵션은 true여서 deployOnStartup 를 false로 줬어도 계속 실행이 됐었어요 ㅠㅠ

    답글삭제