ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Quartz] Could't get host name!
    스프링프레임워크/quartz 2021. 2. 4. 10:56

    이번 시간에는 Quartz 클러스터링을 구현하면서 발생한 이슈와 해결 방법에 대해서 알아보도록 하겠습니다.

     

    Spring Boot로 프로젝트를 구성하였고 Docker Container 2개를 띄워서 테스트 진행하였습니다.

     

    Spring Boot에서 Quartz를 사용하는 방법은 이전 블로그를 참조해주시면 감사하겠습니다.

     

    Docker Container를 구동 시킬 때 아래와 같은 에러가 발생하였습니다.

    에러 내용

     

    Quartz 클러스터링 설정 시 instanceId를 AUTO로 설정하였는데 Quartz의 default ID 생성은 아래의 SimpleInstanceIdGenerator를 사용합니다.

    SimpleInstanceIdGenerator의 경우 내부적으로 host name을 가져와서 ID를 생성하게 되어 있는데 Docker Container 내부에서 host name을 가져오지 못해서 발생되었던 이슈 였습니다.

     

    위 에러를 수정하기 위해서는 InstanceIdGenerator를 상속받는 CustomInstanceIdGenerator를 생성해서 ID 생성 정책을 변경해야 합니다.

    저는 다음과 같이 CustomInstanceIdGenerator를 생성함으로써 Docker Container로 Quartz를 띄울 때 발생되는 이슈를 해결하였습니다.

     

    그 다음 application.yml에서 해당 CustomInstanceIdGenerator을 사용해서 Instance ID를 생성할 수 있도록 설정을 추가합니다.

    instanceIdGenerator.class 프로퍼티에 위에서 생성한 클래스를 패키지 포함해서 입력합니다.

    여기서 주의 할 점은 instanceId: AUTO도 같이 선언되어 있어야 정상적으로 CustomInstanceIdGenerator가 동작합니다.

     

    댓글

Designed by Tistory.