ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 스케줄러 사용법
    극락코딩 2023. 7. 30. 23:22

    스프링 스케줄러 사용법

    스케줄링 관련 서비스를 구현할때, 어떤 주기로 스케줄링을 할지 고민할 때가 많다. cron 및 스프링 스케줄러에서 지원하는 기능을 알아보자

    스프링 스케줄러 패키지

    Gradle: org.springframework:spring-context / org.springframework.scheduling

    먼저 스케줄러를 사용하기 위해서는 스프링 스케줄러 빈을 등록해야 한다. 스케줄러를 사용한다고 명시해야 사용 가능하다

    @Configuration
    @EnableScheduling
    class SchedulerConfig {
    
    }

    스케줄러 주기를 설정하는 방법은 다음과 같다.

    • cron
    • fixedDelay
    • fixedDelayString
    • fixedRate
    • fixedRateString

    그외..

    • zone
    • initialDelay
    • initialDelayString

    cron

    ex) @Scheduled(cron = "* * * * * *")  
    
      ┌───────────── second (0-59)
      │ ┌───────────── minute (0 - 59)
      │ │ ┌───────────── hour (0 - 23)
      │ │ │ ┌───────────── day of the month (1 - 31)
      │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
      │ │ │ │ │ ┌───────────── day of the week (0 - 7)
      │ │ │ │ │ │          (0 or 7 is Sunday, or MON-SUN)
      │ │ │ │ │ │
      * * * * * *

    예시

    "0 0 * * * *" = the top of every hour of every day.
    "*/10 * * * * *" = every ten seconds.
    "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
    "0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day.
    "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day.
    "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
    "0 0 0 25 12 ?" = every Christmas Day at midnight
    "0 0 0 L * *" = last day of the month at midnight
    "0 0 0 L-3 * *" = third-to-last day of the month at midnight
    "0 0 0 1W * *" = first weekday of the month at midnight
    "0 0 0 LW * *" = last weekday of the month at midnight
    "0 0 0 * * 5L" = last Friday of the month at midnight
    "0 0 0 * * THUL" = last Thursday of the month at midnight
    "0 0 0 ? * 5#2" = the second Friday in the month at midnight
    "0 0 0 ? * MON#1" = the first Monday in the month at midnight

    fixedDelay

    현재 진행중인 작업이 끝난 시점으로 지정된 시간 이후에 스케줄링 동작 (ms 기준)
    
    ex) @Scheduled(fixedDelay = 1000)

    fixedDelay

    현재 진행중인 작업이 끝난 시점으로 지정된 시간 이후에 스케줄링 동작 (ms 기준)
    
    ex) @Scheduled(fixedDelayString = "1000")

    fixedRate

    스케줄러가 동작하고 나서 지정된 시간 이후에 다시 스케줄링 동작 (ms 기준)
    현재 작업의 완료와 무관
    
    ex) @Scheduled(fixedRate = 1000)

    fixedRateString

    스케줄러가 동작하고 나서 지정된 시간 이후에 다시 스케줄링 동작 (ms 기준)
    현재 작업의 완료와 무관
    
    ex) @Scheduled(fixedRate = "1000")

    initialDelay

    애플리케이션이 시작되고 지정된 시간이 지난 이후부터 스케줄러가 동작 (ms 기준)
    fixedDelay, fixedRate와 같이 사용
    
    ex) @Scheduled(fixedDelay=5000, initialDelay = 1000)

    initalDelayString

    애플리케이션이 시작되고 지정된 시간이 지난 이후부터 스케줄러가 동작 (ms 기준)
    fixedDelay, fixedRate와 같이 사용
    
    ex) @Scheduled(fixedDelay="5000", initialDelay = "1000")

    Zone

    스케줄러의 동작에 대해 어떤 Time Zone으로 진행할 것인지 선택
    zone을 지정하지 않은 경우, local time zone으로 동작
    
    ex) @Scheduled(crom = "0 0 0 * * *", zone = "Asia/Seoul")

    '극락코딩' 카테고리의 다른 글

    ThreadLocal을 간단하게 살펴보기  (0) 2023.08.15
    ehcache 사용하기 (로컬 캐시 사용하기)  (0) 2023.08.09
    시멘틱 버저닝이란 무엇인가?  (0) 2023.08.09
    OLTP와 OLAP  (0) 2023.07.30
    Server Shutdown  (0) 2023.07.30
극락코딩