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