본문 바로가기
공부/web

[Spring] Spring Scheduler

by 밍미 2020. 3. 11.
SpringScheduler

현재 회사에서 사용하는 배치 프로그램들이 개발자마다 다른.. 방법으로.. 만들어져 있어서 이번에 개선을 하기로 했다.

Spring의 Spring Scheduler와 MyBatis로 일괄 적용을 하기로 했는데,

이왕 적용 하는김에 정리도 같이 해보려고 한다.

 

 

Spring Scheduler란?


Spring framework에서 제공하는 스케줄러

Spring3버전 이상의 환경에서 사용할 수 있다.

 

 

Spring Scheduler 적용


 

applicationContext.xml

Scheduler를 사용하기 위해 task를 추가해준다.

  • <task:annotation-driven />

    • @Schedule, @Async 어노테이션을 활성화시켜준다.

    • xml이 아닌 java config를 사용한다면 아래와 같이 어노테이션으로 작성하면 된다.

    • SpringBoot에서는 Application 클래스에 지정해주면 된다.

       

       

Scheduler.java
  • @Scheduled

    • 스케줄을 지정한다.

    • fixedDelay

      • 마지막 실행이 종료되고 옵션값만큼의 시간을 대기한 후 다음 실행을 시작한다.
      • 항상 하나의 작업 인스턴스가 실행되도록 할 때 유용하다.
      • 단위는 millisecond
    • initialDelay

      • fixedDelay와 함께 사용된다.
      • 최초 Delay 시간을 지정하며, 이 후 작업은 fixedDelay에 따라 실행된다.
    • fixedRate

      • 각 실행이 독립적으로 시작된다. (이전 작업의 실행을 확인하지 않는다.)

      • 이전 실행의 시작시간으로부터 옵션값만큼 대기한 후 다음 실행을 시작한다.

      • 단위는 millisecond

      • fixedRate 옵션을 사용해도 Spring Scheduler는 병렬 실행이 되지 않는 것이 기본이므로, 이전 실행이 끝날 때까지 다음 실행이 시작 되지는 않는다.

        • 이전 작업이 빨리 완료되지 않으면 Out of Memory Exception이 발생할 수 있다.
        • 병렬 실행을 하고싶으면 @Async 어노테이션을 @Scheduled어노테이션과 함께 사용하면 된다.
    • cron

      • cron식을 사용해서 스케줄을 지정한다.
      • cron식 사용법은 여기서
    • fixedDelayString, fixedRateString

      • 위에서는 모두 스케줄링 값을 하드코딩했는데, 설정파일 등에서 받아와 사용하게 할 수도 있다.
    • 또는 xml 파일에서 지정할 수 있다.

       

댓글