Spring Framework
Spring _ Scheduler
꾸주니12
2022. 7. 14. 17:44
Scheduler
- 주기적인 반복작업을 위해 사용(스레드는 편리하나 구현하는데 다소 복잡할 수 있다, 특히 반복주기를 ms로만 정해야해서 요일 등의 주기를 잡기가 어렵다)
- 별도 라이브러리 없이 스프링에서 제공
- 실행과 중지를 마음대로 할 수 없다.
사용 방법
1. appservlet폴더 밑에 설정파일 추가 (요청이 들어오면 할거니까) - new - Spring Bean Configuration File - bean, task에 체크
<!-- 스케쥴 등록 방식 1. 어노테이션 방식 -->
<task:annotation-driven/>
<!-- 스케쥴 등록 방식 2. 빈 등록 방식 -->
<!-- cron : 매 초/분/시/일/월/요일/년 (년은 생략하면 매년이라고 인식 )-->
<!--
<bean id="scheduleJob" class="com.spring.main.service.SchedulerService"/>
<task:scheduled-tasks>
<task:scheduled ref="scheduleJob" method="loop" cron="0/5 * * * * MON-FRI"/>
</task:scheduled-tasks>-->
- *두가지 방식을 혼용하는 것은 위험하다*
- 어노테이션 방식 : 편하지만 수정할 때 번거롭다. 스케쥴 내용이 고정된다면 어노테이션 방식을 사용하는게 훨씬 편함.
- 빈 등록 방식 : 스케쥴 내용이 수시로 바뀌는건 빈 등록이 더 편하고,엔지니어에게 수정 요청하기 편함. 이 방법을 많이 사용
2. 반복할 작업 작성 (scheduled 어노테이션)
@Scheduled(fixedRate = 5000)
public void loop() {
logger.info("5초마다 로그를 찍는다.");
}
@Scheduled(fixedRate = 1000)
public void getCount() {
int cnt = dao.count();
logger.info("게시물 개수 : " + cnt);
}
+ controller에선 아무것도 하지않았고, service에서 해줌
옵션
- fixedRate = 5000 : 무조건 5초마다(ms)
- fixedDelay = 5000 : 앞 작업이 끝나고 5초 후에(ms) / 선행되는 작업을 받아서 들어가야할때
- cron = 매 초/분/시/일/월/요일/년 (조합법은 찾아서 쓰기) ex)월차나 생일등에 어떤 메세지를 보내는 등에 활용
- 몇월 며칠등 구체적으로 지정 할 수있음. fixeddelay, fixedrate는 안됨
cron 참고자료 : https://www.baeldung.com/cron-expressions
언제 사용할까?
ex) 쇼핑몰 실시간 판매량 확인, 관리자 회원 수 매일 찍어서 확인한다거나 등
- logging
- db변화 감지
- OLD Data base삭제
09_Scheduler