[Spring] 스프링에서 Scheduler 사용하기
- 프로그램언어/스프링(Spring)
- 2021. 2. 3.
스케쥴링을 위해서 while(true)로 무한으로 돌린 후, sleep 걸어서 사용하거나 linux에서 crontab으로 주기적으로 실행하는 방법을 이용할 수 있겠지만 스프링 프레임워크(spring framework)에서는 crontab을 내장해서 사용하는 듯한 매우 편리한 방법을 제공해준다.
스케쥴러를 사용하기 위해서는 spring task라는 내장되어 있는 기능을 사용하면 된다. 예전에는 쿼츠(Quartz)를 많이 활용했던 걸로 기억하는데 본 포스팅의 방식으로 핸들링이 안된다면 Quartz를 한번 찾아보길 바란다.
스프링 scheduler를 사용할 때 어노테이션(annotation)으로 심플하게 제어하는 방법과 xml으로 핸들링하는 방법이 있는데 본 포스팅에서는 xml이 아닌 annotation으로만 제어하도록 한다.
스키마 설정
xmlns:task라는 스키마를 등록하는 것과 스키마경로를 지정 한후, 하단에 task:annotation-drive 태그를 입력한다.
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"
<task:annotation-driven />
어노테이션 설정
스케쥴링을 원하는 메소드에 @Scheduled라는 어노테이션을 붙이고, 스케쥴링을 설정하면 된다. 스케쥴은 크론탭과 같은 방식을 제공하니 크론탭이 편리하다면 크론탭의 방식을 사용하면 된다.
fixed 방식
// 3초마다 실행
@Scheduled(fixedDelay=3000)
public void test() {
System.out.println("dely 3000");
}
fixedDelay
- 실행된 task의 종료 시간으로부터 지정된(ms 단위) 시간이 지난 후 실행 된다.
fixedRate
- 실행된 시간으로부터 지정된(ms) 시간이 지난 후 실행 된다.
Cron 방식
// 5초마다 실행
@Scheduled(cron = "*/5 * * * * *")
public void test2() {
System.out.println("dely 5000");
}
cron 방식을 활용하면 정해진 요일, 혹은 시간등이 필요할 경우 cron 방식으로 시간과 날짜 등을 지정할 수 있다.
cron은 내용이 방대하기 때문에 자세한 내용은 아래 링크 참조
스케쥴링 결과
// 3초마다 실행
@Scheduled(fixedDelay=3000)
public void test() {
System.out.println("delay 3000");
}
// 5초마다 실행
@Scheduled(cron = "*/5 * * * * *")
public void test2() {
System.out.println("delay 5000");
}
# Result
delay 3000
delay 5000
delay 3000
delay 3000
delay 5000
delay 3000
delay 5000
delay 3000
delay 3000
위와 같이 3초와 5초가 번갈아가면서 제때 나오는 것을 확인할 수 있다.
참고자료
https://en.wikipedia.org/wiki/Cron
https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab
'프로그램언어 > 스프링(Spring)' 카테고리의 다른 글
[Spring boot] 스프링부트 jdbcTemplate 세팅 및 예제 (0) | 2022.04.28 |
---|---|
[Springboot] 스프링부트로 부트스트랩(bootstrap) 붙이기 (0) | 2021.06.20 |
[Spring] WAS 환경별 @Value 변경 방법 (0) | 2020.10.23 |
[Spring] @value(value annotation) 사용 방법 (0) | 2020.10.23 |
Spring에서 JSON 사용법(jsonView) (1) | 2020.10.14 |