Rooted In Develop

스프링 부트 스케줄러 @Scheduled 어노테이션 사용법(@Scheduled Annotation) 본문

Back End/Spring Boot

스프링 부트 스케줄러 @Scheduled 어노테이션 사용법(@Scheduled Annotation)

RootedIn 2020. 4. 22. 22:15

@Scheduled 사용법에 대해 소스 예제를 들어 설명하겠습니다.

 

1. @EnableScheduling 추가

1) @SpringBootApplication에 선언

package me.rooted.schedule;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
public class SpringSchedulerApplication {

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

}

2) @Component(@Service 등)에 선언

package me.rooted.schedule;

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@EnableScheduling
@Component
public class ScheduledExample {

}

@EnableScheduling은 꼭! SpringBootApplication이 선언된 패키지나, 그 하위 패키지에 선언하여야합니다.

또한 @Scheduled는 @EnableScheduling이 선언된 패키지나, 그 하위 패키지에 선언되어야 정상 동작합니다.

2. @Scheduled 사용법

1) cron

	@Scheduled(cron = "0/5 * * * * ?")
	public void scheduledCron() {
		log.info("scheduledCron");
	}

cron 표현식을 사용합니다.

cron = "초 분 시 일 월 요일" 로 이루어져 있습니다.

위의 cron 표현식은 5초마다 실행하는 스케줄러가 되겠습니다.

2) fixedDelay

	@Scheduled(fixedDelay = 1000)
	public void scheduledFixedDelay() throws InterruptedException {
		log.info("scheduledFixedDelay");
		Thread.sleep(200L);
	}

해당 메소드가 종료된 이후부터 그 다음 메소드 실행시간까지의 주기이며, 단위는 ms입니다.

 

- 실행결과 : 200ms만큼 sleep하여서, 1.2초마다 메소드가 실행됩니다.

2020-04-22 22:09:25.063  INFO 68 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedDelay
2020-04-22 22:09:26.265  INFO 68 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedDelay
2020-04-22 22:09:27.467  INFO 68 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedDelay
2020-04-22 22:09:28.669  INFO 68 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedDelay
2020-04-22 22:09:29.871  INFO 68 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedDelay

3) fixedRate

	@Scheduled(fixedRate = 1000)
	public void scheduledFixedRate() throws InterruptedException {
		log.info("scheduledFixedRate");
		Thread.sleep(200L);
	}

해당 메소드가 실행된 직후부터의 주기이며, 단위는 ms입니다.

 

- 실행결과 : 200ms만큼 sleep하여도, 1초마다 메소드가 실행됩니다.

2020-04-22 22:06:40.390  INFO 7932 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedRate
2020-04-22 22:06:41.390  INFO 7932 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedRate
2020-04-22 22:06:42.390  INFO 7932 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedRate
2020-04-22 22:06:43.390  INFO 7932 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedRate
2020-04-22 22:06:44.390  INFO 7932 --- [   scheduling-1] me.rooted.schedule.ScheduledExample      : scheduledFixedRate

4) fixedDelayString

	@Scheduled(fixedDelayString = "${fixed.delay.string}")
	public void scheduledFixedDelayStringProperty() {
		log.info("scheduledFixedDelayStringProperty");
	}

- src/main/resources/application.properties

fixed.delay.string=2000

properties에서 스케줄링 주기를 받아올 수 있습니다.

5) fixedRateString

	@Scheduled(fixedRateString = "${fixed.rate.string}")
	public void scheduledFixedRateStringProperty() {
		log.info("scheduledFixedRateStringProperty");
	}

- src/main/resources/application.properties

fixed.rate.string=2000

properties에서 스케줄링 주기를 받아올 수 있다.

 

6) initialDelay

	@Scheduled(fixedDelay = 1000, initialDelay = 1000)
	public void scheduledFixedDelay() {
		log.info("scheduledFixedDelay");
	}

7) initialDelayString

	@Scheduled(fixedDelay = 1000, initialDelayString = "${initial.delay.string}")
	public void scheduledFixedDelay() {
		log.info("scheduledFixedDelay");
	}

- src/main/resources/application.properties

initial.delay.string=2000

properties에서 스케줄링 주기를 받아올 수 있다.

 

 

도움이 되셨다면, 공감 클릭과 댓글 부탁드립니다.

Comments