스프링 부트에서 일정 시간 주기적으로 작업하는 스케쥴러를 만들어보려고 한다
@EnableScheduling 추가하기
@EnableScheduling
주석은 응용 프로그램의 스케줄러를 활성화하는 데 사용된다
- 기본 스프링 부트 애플리케이션 클래스 파일에 추가해야 한다
1 2 3 4 5 6 7
| @SpringBootApplication @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
|
주기설정
crontab 방식으로 주기를 설정할때 표현식은 아래링크를 참고
https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
@Scheduled 추가하기
- @Scheduled 특정 기간 스케줄러를 트리거하는 데 사용한다
1 2 3
| @Scheduled(cron = "0 * 9 * * ?") public void cronJobSch() throws Exception { }
|
아래 예제는 매일 오전 9 시부 터 오전 9시 59 분까지 매분마다 작업을 실행하는 방법을 보여주는 샘플 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;
@Component public class Scheduler { @Scheduled(cron = "0 * 9 * * ?") public void cronJobSch() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); Date now = new Date(); String strDate = sdf.format(now); System.out.println("Java cron job expression:: " + strDate); } }
|
@Scheduled fixedRate 고정된 주기로 실행하기
- @Scheduled(fixedRate = 1000) 처럼 사용하면 특정 주기로 실행가능하다
- 완료되는것을 기다리지 않고 실행한다
- 단위는 ms
1 2 3
| @Scheduled(fixedRate = 1000) public void fixedRateSch() { }
|
- 아래와 같이 구현할 경우 이전 작업이 완료 될 때까지 기다린다
1 2 3
| @Scheduled(fixedDelay = 1000, initialDelay = 1000) public void fixedDelaySch() { }
|