CoDream

@Scheduled 본문

Spring/Spring 이론

@Scheduled

코잠 2024. 6. 27. 09:25
728x90
반응형

 

 

@Scheduled

 

스프링의 @Scheduled 애노테이션은 다양한 방식으로 스케줄링 작업을 설정할 수 있습니다. 주로 사용하는 세 가지 종류는 fixedRate, fixedDelay, 그리고 cron입니다. 각 옵션이 어떻게 동작하는지, 그리고 언제 사용하는지에 대해 자세히 설명하겠습니다.

 

1. fixedRate

fixedRate는 이전 작업의 시작 시간으로부터 지정된 시간 간격으로 작업을 실행합니다.

작업이 완료되는 시간을 고려하지 않고 일정 간격으로 작업을 시작합니다.

@Scheduled(fixedRate = 5000)
public void executeTask() {
    // 5초마다 작업 실행
    System.out.println("Task executed at " + System.currentTimeMillis());
}

사용 시기:

  • 작업의 실행 간격이 일정해야 하는 경우.
  • 작업 시간이 짧아서 간격에 큰 영향을 미치지 않는 경우.

2. fixedDelay

fixedDelay는 이전 작업이 완료된 시점으로부터 지정된 시간 간격 후에 작업을 실행합니다.

즉, 작업이 끝난 후 일정 시간이 지나면 다음 작업을 시작합니다.

@Scheduled(fixedDelay = 5000)
public void executeTask() {
    // 이전 작업 완료 후 5초 후에 작업 실행
    System.out.println("Task executed at " + System.currentTimeMillis());
}

사용 시기:

  • 각 작업이 완료된 후 일정 시간이 지난 후에 다음 작업을 실행해야 하는 경우.
  • 작업 시간이 가변적이고, 작업 완료 후에 일정한 대기 시간이 필요한 경우.

3. initialDelay

initialDelay는 첫 번째 작업이 실행되기 전에 대기하는 시간을 지정합니다.

fixedRate 또는 fixedDelay와 함께 사용하여 처음 작업을 시작하기 전에 지연 시간을 설정할 수 있습니다.

@Scheduled(fixedRate = 5000, initialDelay = 10000)
public void executeTaskWithDelay() {
    // 애플리케이션 시작 후 10초 후에 첫 작업 실행, 이후 5초 간격으로 작업 실행
    System.out.println("Task executed at " + System.currentTimeMillis());
}

사용 시기:

  • 애플리케이션 시작 후 바로 작업을 실행하지 않고 일정 시간 후에 시작해야 하는 경우.

4. cron

cron 표현식은 더 정교하고 유연하게 작업 스케줄을 설정할 수 있는 방법입니다.

cron 표현식을 사용하여 특정 시간, 요일, 월 등 다양한 조건을 설정할 수 있습니다.

@Scheduled(cron = "0 0/5 * * * ?")
public void executeCronTask() {
    // 매 5분마다 작업 실행
    System.out.println("Cron task executed at " + System.currentTimeMillis());
}

사용 시기:

  • 특정 시간, 요일, 월 등에 작업을 실행해야 하는 경우.
  • 복잡한 스케줄을 설정해야 하는 경우.

Cron 표현식 예시:

  • 0 0 12 * * ? : 매일 12시 정각에 실행
  • 0 15 10 * * ? : 매일 10시 15분에 실행
  • 0 0 10,14,16 * * ? : 매일 10시, 14시, 16시에 실행
  • 0 0/30 9-17 * * ? : 9시부터 17시까지 매 30분마다 실행
  • 0 0 0 1 * ? : 매월 1일 자정에 실행
728x90
반응형

'Spring > Spring 이론' 카테고리의 다른 글

Spring AOP 주요 용어  (0) 2024.06.27
스프링 AOP(Aspect-Oriented Programming)  (0) 2024.06.19
디스패처 서블릿  (0) 2024.06.18
스프링 MVC의 동작 원리  (0) 2024.06.18
스프링 - 컨트롤러 정의, CORS허용  (2) 2024.05.11