@Scheduled

정의

@Scheduled일정한 시간 간격 또는 특정 시각에 메서드가 자동 실행되도록 하는 애너테이션이다.

반복 작업, 배치성 처리, 주기적인 상태 점검 같은 작업에 사용한다.

🧩 Artifact

  • spring-context

🛠 사용법

  • @Configuration 또는 설정 클래스에 @EnableScheduling을 적용한다.
@EnableWebMvc
@EnableScheduling
@ComponentScan(basePackages = "org.test")
public class WebMvcTestConfiguration implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }
}
  • 스케줄이 필요한 메서드에 @Scheduled를 적용한다.
@Component
public class ScheduleSample {
    @Scheduled(cron = "0 0/1 * * * ?")
    public void doEveryOneMinutes() {
        System.out.println(LocalTime.now() + " : doEveryOneMinutes");
    }
}

image

⚙️ @Scheduled 옵션

cron

  • cron 표현식을 사용한다.
@Scheduled(cron = "0 0/1 * * * ?")
public void doEveryOneMinutes() {
    System.out.println(LocalTime.now() + " : doEveryOneMinutes");
}
@Scheduled(cron = "#{@getCronForDeleteOldTaskQueue}")
public void deleteOldTaskQueue() {
    Integer[] values = getBatchExecutingInfoValues(BatchJobTypeCode.BATCH_DELETE_OLD_TASK_QUEUE, new Integer[] {30});
    taskQueueWebService.deleteOldTaskQueue(values[0]);
}

fixedDelay

  • 메서드가 종료된 뒤부터 다음 실행까지의 간격을 지정한다.
  • 단위는 ms다.
@Scheduled(fixedDelay = 3000)
private void scheduleTest() {
    logger.error("hello");
}

fixedDelayString

  • properties에서 주기 값을 읽어온다.

fixedRate

  • 메서드가 시작된 시점을 기준으로 주기를 계산한다.
  • 단위는 ms다.

fixedRateString

  • properties에서 실행 주기 값을 읽어온다.
@Scheduled(fixedRateString = "${myscheduler.period}")
private void scheduleTest() {
    logger.error("hello");
}

initialDelay

  • 처음 실행되기까지의 지연 시간을 지정한다.
@Scheduled(initialDelay = 3000)
private void scheduleTest() {
    logger.error("hello");
}

initialDelayString

  • properties에서 초기 지연 시간을 읽어온다.

⚠️ 주의사항

  • @EnableScheduling이 있어야 @Scheduled가 동작한다.
  • 스케줄 메서드는 일반적으로 void 반환을 사용한다.
  • 동일 메서드가 겹쳐 실행될 가능성을 고려해야 한다.
  • cron 표현식은 오타가 나면 실행이 안 되므로 주의해야 한다.

📌 정리

  • @Scheduled는 Spring의 예약 실행 애너테이션이다.
  • cron, fixedDelay, fixedRate, initialDelay를 상황에 맞게 사용한다.
  • 반복 작업과 주기 점검에 유용하다.

연결문서

댓글남기기