@Scheduled 이용한 스케줄작성

스케줄 활성화

@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()));
    }

}

log 확인

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 상세

@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 "";

}
  • cron:크론탭을 규칙 지정 한다.

  • zone:cron 타임존

  • fixedDelay:이전 수행 시간과 다음 수행 시간관의 간격! (단위 ms)

  • fixedDelayString:이전 수행 시간과 다음 수행 시간관의 간격! java.time.Duration#parse 파싱해야 된다.

  • fixedRate:고정 시간간격으로 수행, 이전 수행 시간과 다음 수행 시간관의 간격(단위: ms),먼저 수행한 스케줄이 아직 완료 되지 않으면 worker 에 대기로 넘어가고 완료후 다음 스케줄 실행으로 넘어간다.

  • fixedRateString:fixedRate 와 같은 로직, 단지 java.time.Duration#parse 이용하여 파싱

  • initialDelay:처음 수행 시 딜레이 시간.

  • initialDelayString:처음 수행 시 딜레이 시간, java.time.Duration#parse 으로 파싱.

Last updated