-
[Spring] Spring에서 Scheduler 처리하기Spring 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.classpublic 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 표현식 : 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반응형'Spring' 카테고리의 다른 글
[AWS + Spring] EB + Spring Boot + Aurora RDS 연동 및 Read/Write 분산 처리 (1) (0) 2023.01.04 [Spring] Spring에서 CORS 처리(설정)하는 방법 (0) 2022.10.27 Spring Boot 공통 Global Exception Handler (0) 2022.10.23 Spring Security + JWT 회원가입, 로그인 (3) (0) 2022.10.23 Spring Security + JWT 회원가입, 로그인 (2) (0) 2022.10.23