본문 바로가기

STUDY/Spring

Spring Boot | 스케쥴러(Scheduler) 사용해보기

Scheduled Task 작성하기

@Scheduled annotation에 해당 메서드가 언제 실행될지를 정의

@Scheduled annotation 속성값

  • fixedRate : 이전 수행이 시작된 시점을 기준으로 함 (수행 시작 후 지정된 시간 이후에 실행)
  • fixedDelay : 이전 수행이 종료된 시점을 기준으로 함 (수행 종료 후 지정된 시간 이후에 실행)
  • cron : 초(0-59) - 분(0-59) - 시간(0-23) - 일(1-31) - 월(1-12) - 요일(0-7) 순으로 지정
  • zone : 시간대를 설정할 수 있음 설정하지 않으면 서버 시간을 기준으로 함
@Component
public class Scheduler {

    private static final Logger logger = LoggerFactory.getLogger(Scheduler.class);

    @Scheduled(cron = "0 0 0 * * *")    // 매일 0시 0분 0초에 실행하겠다
    public void testScheduler () {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date now = new Date();
        String today = sdf.format(now);

        logger.info("============ " + today + " 스케쥴러 실행. ============");

    }

}

Scheduling 활성화

@EnableScheduling annotation으로 활성화

@EnableScheduling
@SpringBootApplication
public class SchedulingTasksApplication {

    public static void main(String[] args) {
        SpringApplication.run(ToogainApiApplication.class, args);
    }

    @Bean
    public TaskScheduler taskScheduler() {
        return new ConcurrentTaskScheduler();
    }

}

+) 참고

스프링부트에서 Scheduling 사용하기 · 기억하기 위한 개발노트
Spring Boot Scheduler @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)
 │ │ │ │ │ │
 * * * * * *