본문 바로가기
Spring/Spring

[Spring] Scheduler 세팅 및 사용하기

Scheduler 세팅 및 사용하기

Spring프로젝트를 만들다 주어진 시간마다 정기적으로 동작하는 로직을 추가해야 할 일이 발생했습니다. Thread를 이용한 데몬을 만들 수도 있었지만 보다 간편한 Spring Scheduler를 이용하기로 결정했고 결정하기 이전에 Quartz에 대해서 잠시 고민했었지만 Scheduler에는 없는 Quartz의 다양한 기능들 까지는 필요가 없다고 판단하여 보다 간단판 Scheduler를 이용하기로 결정했습니다.

 

 

 

 

 

1. XML설정

Spring Scheduler를 사용하기 위해서 따로 추가해야 하는 maven은 없습니다. 따라서 바로 xml설정을 시작하면 되는데 기본적인 xml설정과는 별개로 Scheduler함수에 대한 설정을 xml에서 할수도 있고 @Scheduler를 이용하여 할수도 있는데 저는 어노테이션을 활용한 방법을 사용하기로 했습니다.  

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
    <context:component-scan base-package="com.freedy.cmm.scheduler" />
		
    <!-- 스케줄러 생성 -->
    <task:annotation-driven executor="executor" scheduler="scheduler"/>
    <!-- pool-size 지정하지 않을 경우 쓰레드 풀의 기본값은 1 -->   
    <task:scheduler id="scheduler" pool-size="10"/>
    <task:executor id="executor" pool-size="10"/>
	
</beans>

 

 

 

 

 

2. Scheduler함수 설정

package com.freedy.cmm.scheduler;

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

/*
 * @Scheduled는 리턴 타입이 void이고 파라미터를 갖지 않는 메서드에 적용되며
 * 스케줄링 설정을 위해 cron, fixedRate, fixedDelay속성을 지정 가능.
 */
@Service
public class SchedulerService {
	
      /*
       * 초 0 ~ 59
       * 분 0 ~ 59
       * 시 0 ~ 23
       * 일 1 ~ 31
       * 월 1 ~ 12
       * 요일 0 ~ 7
       */
	@Scheduled(cron = "*/1 * * * * *")
	public void sampleScheduler1() {
		System.out.println("테스트");
	}

	/*
	 * 이전 시작시간으로부터 지정된 시간이후 수행 
	 * ※ 지난프로세스가 종료 되지 않아도 시작된 시간으로 부터
	 */
	@Scheduled(fixedRate = 1000)
	public void sampleScheduler2() {
		System.out.println("fixedRate");
	}
	

	/*
	 * 최종 종료시간으로부터 지정된 이후 수행 
	 * ※ 지난프로세스가 종료된 이후
	 */
	@Scheduled(fixedDelay = 1000)
	public void sampleScheduler3() {
		System.out.println("fixedDelay");
	}
}

댓글