Spring
[Spring] Spring에서 Scheduler 처리하기
BigBeen
2022. 10. 26. 09:08
반응형
일정한 시간간격 또는 일정한 시각에 특정 로직을 돌리기 위해서 사용하는 것을
'Scheduler' 라고 한다.
Spring에선 'Spring Scheduler' 라이브러리를 제공한다.
💡 Spring Scheduler
- Spring Scheduler는 Spring Boot starter에 기본적인 의존성이 제공되기 때문에 별도의 추가적인 의존성이 필요하지 않다.
- 사용하기 위해서 Application Class에 @EnableScheduling 어노테이션 선언
Application.class
@EnableScheduling
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
그리고 @Scheduled 어노테이션을 지정하는 메서드에 선언한다. @Scheduled Method는 두 가지 규칙을 가지고 있어야 한다.
- method는 void의 return Type 가져야 함
- method는 파라미터를 가질 수 없음
ScheduleTask.class
public class Scheculer() {
@Scheduled(fixedDelay = 1000) // scheduler 끝나는 시간 기준으로 1초 간격으로 실행
public void scheduleFixedDelayTask() {
System.out.println(
"Fixed delay task - " + System.currentTimeMillis() / 1000);
}
@Scheduled(fixedRate = 1000) // scheduler 시작하는 시간 기준으로 1초 간격으로 실행
public void scheduleFixedRateTask() {
System.out.println(
"Fixed rate task - " + System.currentTimeMillis() / 1000);
}
@Transactional(rollbackFor = Exception.class)
@Scheduled(cron = "0 1 0 * * *") // 매일 0시 1분 마다 실행
public void autoDeletePhoneNumSert() {
log.info("======== PhoneNumCert Manage Task start ========");
int cnt = taskPhoneNumCertMapper.deleteByCreatedDt();
log.info(cnt + "개 정보 삭제");
log.info("======== PhoneNumCert Manage Task completed ========");
}
@Scheduled(cron = "0 15 10 15 * ?", zone = "Europe/Paris") // cron에 TimeZone 설정 추가
}
❗️ Cron 표현식을 통해 특정 시각에 실행되게끔 할 수 있다.
- Cron 표현식 : 7개의 각 필드로 구성되어 있으며, 각 필드의 내용은 아래와 같다.
초 | 분 | 시 | 일 | 월 | 요일 | 연도
0~59| 0~59 | 0~23| 1~31| 1~12| 0~6 | 생략가능
요일: 0 (일요일) ~ 6(토요일)
?: 설정 값 없을 때 - 일과 요일에서만 사용 가능
* : 모든 조건
시작시간 / 단위 : 시작시간 부터 해당 단위 때
시작범위-끝범위 : 시작범위 부터 끝 범위까지
L : 마지막-일, 요일에서만 사용 가능
W: 가장 가까운 평일 찾는다 - 일 에서만 사용 가능
ex) 10W
10일이 평일 일 때 : 10일에 실행
10일이 토요일 일 때 : 가장 가까운 평일인 금요일(9일)에 참
10일이 일요일 일 때 : 가장 가까운 평일인 월요일(11일)에 참
# : 몇 주 째인지 찾는다 - 요일 에서만 사용 가능
ex) 3#2 : 수요일 #2째주에 참
Properties
cron | cron표현식을 지원한다. "초 분 시 일 월 요일(년)"으로 표현한다. |
fixedDelay | milliseconds 단위로, 이전 작업이 끝난 시점으로 부터 고정된 시간을 설정한다. ex) fixedDelay = 5000 |
fixedDelayString | fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다. ex) fixedDelay = "5000" |
fixedRate | milliseconds 단위로, 이전 작업이 수행되기 시작한 시점으로 부터 고정된 시간을 설정한다. ex) fixedRate = 3000 |
fixedRateString | fixedDelay와 같은데 property의 value만 문자열로 넣는 것이다. ex) fixedRate = "3000" |
initialDelay | 스케줄러에서 메서드가 등록되자마자 수행하는 것이 아닌 초기 지연시간을 설정하는 것이다. |
initialDelayString | 위와 마찬가지로 문자열로 값을 표현하겠다는 의미다. |
zone | cron표현식을 사용했을 때 사용할 time zone으로 따로 설정하지 않으면 기본적으로 서버의 time zone이다. |
출처 : https://jeong-pro.tistory.com/186
반응형