@EnableScheduling 어노테이션을 사용하여 스케줄 기능을 활성화 한다.
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("현재시간 : " + dateFormat.format(new Date()));
}
}
2022-12-27 14:56:56.413 INFO 34836 --- [ main] c.d.chapter71.Chapter71Application : Started Chapter71Application in 1.457 seconds (JVM running for 1.835)
2022-12-27 14:57:01.411 INFO 34836 --- [ scheduling-1] com.blake.scheduled.ScheduledTasks : 현재시간 : 14:57:01
2202-12-27 14:57:06.412 INFO 34836 --- [ scheduling-1] com.blake.scheduled.ScheduledTasks : 현재시간 : 14:57:06
2022-12-27 14:57:11.413 INFO 34836 --- [ scheduling-1] com.blake.scheduled.ScheduledTasks : 현재시간 : 14:57:11
2022-12-27 14:57:16.413 INFO 34836 --- [ scheduling-1] com.blake.scheduled.ScheduledTasks : 현재시간 : 14:57:16
@Scheduled(fixedRate = 5000) : 매 5초 마다 스케줄 1회 실행. @Scheduled 원본 소스를 관찰해보면
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
String CRON_DISABLED = ScheduledTaskRegistrar.CRON_DISABLED;
String cron() default "";
String zone() default "";
long fixedDelay() default -1;
String fixedDelayString() default "";
long fixedRate() default -1;
String fixedRateString() default "";
long initialDelay() default -1;
String initialDelayString() default "";
}