13. Spring Scheduler (스케줄러) 설정

1. servlet-contxet.xml 설정

   - src > main > webapp > WEB-INF > spring > appServlet > servlet-context.xml

   - 하단의 namespaces > task 체크

 

2.  bean 설정

   - 아래의 코드 적용

   - 주의사항 : context:component-scan 보다 아래쪽에 적용

   - 주의사항 : class 에는 3번에 적용될 class파일 이름까지 넣어야 한다

   - src > main > webapp > WEB-INF > spring > appServlet > servlet-context.xml

<context:component-scan base-package="com.hhkim.homepage" />

<!-- scheduler 설정 -->
<beans:bean class="com.hhkim.homepage.scheduler.testScheduler"/>
<task:annotation-driven scheduler="scheduler"/>
<task:scheduler id="scheduler" pool-size = "10"/>

 

3. 폴더 및 파일 생성

   - batch 폴더 생성

   - src > main > homepage > com > hhkim > homepage > scheduler

   - scheduler 파일 생성

   - src > main > homepage > com > hhkim > homepage > scheduler > testScheduler.java

4. 코드 적용

   - 주의사항 : public class에 어노테이션 @component 적용 시 이중 실행이 될 수 있음으로 servlet-context.xml 설정에서 base-package와 스케줄러의 class가 중복되지 않도록 수정해야 한다

   - 관련 설명 정리 : https://data-make.tistory.com/699

   - src > main > homepage > com > hhkim > homepage > scheduler > testScheduler.java

package com.hhkim.homepage.batch;

import java.time.LocalDate;
import java.time.LocalTime;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

public class testScheduler {
	
	/*************************************************
	 * cron : 초 분 시 일 월 요일(1-7 : 1 = 일요일, 7 = 토요일)
	 *  * : 전체 
	 *  L : 마지막 [예시 : ( * * * * * 6L ) : 매월 마지막 주 금요일에만 동작]
	 *  - : 해당 시간 간격 사이 조건 [예시 :  ( * 5-10 * * * *) : 5분에서 10분 사이에서만 동작]
	 *************************************************/
	@Scheduled(cron = " 15 * * * * * ")
	public void testCronPrint() {
		
		LocalDate nDate = LocalDate.now();
		LocalTime nTime = LocalTime.now();
		
		System.out.println("Scheduled 출력 테스트 : " + nDate + " / " + nTime);
		
	}
	
	/*************************************************
	 * (ms) 초마다 동작 : 작업이 끝난 시점부터 (이전 작업 완료 후)
	 *************************************************/
	@Scheduled(fixedDelay = 10000)
	public void testFixPrintOne() {
		
		LocalDate nDate = LocalDate.now();
		LocalTime nTime = LocalTime.now();
		
		System.out.println("작업 종료 후 10초 (단위 ms) : " + nDate + " / " + nTime);
		
	}

	/*************************************************
	 * (ms) 초마다 동작 : 작업이 시작된 시점부터 (고정 시간 간격)
	 *************************************************/
	@Scheduled(fixedRate = 5000)
	public void testFixPrintTwo() {
		
		LocalDate nDate = LocalDate.now();
		LocalTime nTime = LocalTime.now();
		
		System.out.println("작업 시작 후 5초 (단위 ms) : " + nDate + " / " + nTime);
		
	}

}

 

5. 실행 확인