Spring task라는 내장된 기능 통해 특정 메서드를 주기적으로 실행하는 것이 가능하다.
스케쥴링 지원 활성화
Configuration에 @EnableScheduling
어노테이션을 추가하면 활성화된다.
@Configuration
@EnableScheduling
public class SpringConfig {
...
}
fixed 방식
fixed 방식에는 2가지가 있다.
- fixedDelay: 작업이 종료된 시간부터 지정된(ms단위) 시간 뒤에 재실행.
- fixedRate: 작업이 시작된 시간부터 지정된(ms단위) 시간 뒤에 재실행.
@Scheduled(fixedDelay = 1000)
public void scheduleFixedDelayTask() {
System.out.println(
"Fixed delay task - " + System.currentTimeMillis() / 1000);
}
@Scheduled(fixedRate = 1000)
public void scheduleFixedRateTask() {
System.out.println(
"Fixed rate task - " + System.currentTimeMillis() / 1000);
}
Cron 표현식 방식
특정한 시각이나 좀 더 상세한 주기로 실행하고 싶다면 Cron 표현식을 이용할 수 있다.
@Scheduled(cron = "0 15 10 15 * ?")
public void scheduleTaskUsingCronExpression() {
long now = System.currentTimeMillis() / 1000;
System.out.println(
"schedule tasks using cron jobs - " + now);
}
Cron 표현식은 6개의 숫자가 각각 (초, 분, 시, 일, 달, 요일)을 나타낸다. 나같은 경우는 매시 0분, 30분마다 실행되기를 원해서 0 0/30 * * * ?
같이 작성했다.
Cron 표현식에 관한 자세한 표현법은 아래를 참고한다.
https://zamezzz.tistory.com/197
또한, 해당 사이트에서 자신의 cron 표현식을 테스트해볼 수도 있다.
http://www.cronmaker.com/;jsessionid=node01fknd6e93yhze1v5f444d9p57g3329920.node0?0
참고 자료
https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
http://www.cronmaker.com/;jsessionid=node01fknd6e93yhze1v5f444d9p57g3329920.node0?0