반응형

부트에서 스케줄러 사용하기

기존 Legacy 프로젝트를 구성할 때는 quartz를 통해  servlet.xml에 cron설정을 하여 주로 사용하여 왔는데, 부트에서는 추가 라이브러리 없이 쉽게 사용이 가능합니다.

 

 

기존 메인 설정은 그대로 사용하셔도 됩니다. 스케줄러 사용을 위해 어노테이션 @EnableScheduling를 추가합니다.

 

TestSpringBootApplication.java

@EnableScheduling  //스케줄링
@SpringBootApplication
public class TestSpringBootApplication {

	public static void main(String[] args) {
    		SpringApplication app = new SpringApplication(SrokSpringBootApplication.class);		
    		app.setBannerMode(Mode.CONSOLE);
    		app.run(args);
	}
}

설정을 하였으면, 스케줄러가 동작할 Class를 작성해보겠습니다.

 

 

 

SchedulerTest.java - cron버전

import java.time.LocalDateTime;

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

@Component
public class SchedulerTest {
	
	/**
	 * cron탭을 사용한 스케줄러
	 */
	@Scheduled(cron="0 14 * * * ?")
	public void cronJobSch() {
		System.out.println("Sheduler time(cron) : " + LocalDateTime.now());
	}
}

cron 탭을 사용하여 동작 처리를 하였습니다.

예제의 cron은 매 14분 0초마다 동작하는 스케줄러입니다.

 

 

 

SchedulerTest.java - fixedDelay버전

@Component
public class SchedulerTest {

	/**
	 * 이전 수행 종료된 시간으로부터 입력 시간마다 호출됨
	 * 수행이 끝나고 1초뒤에 수행
	 */
	@Scheduled(fixedDelay = 1000)
	public void oneSecActionSch() {
		System.out.println("Sheduler time(fixedDelay) : " + LocalDateTime.now());
	}
}

이번엔 fixedDelay 속성으로 처리하였습니다. fixedDelay는 해당 스케줄러의 동작이 종료되고 입력한 n초뒤에 동작합니다. ex) 1000 = 1초

 

 

 

SchedulerTest.java - fixedRate버전

@Component
public class SchedulerTest {
	
	/**
	 * 수행이 시작된 시간으로부터 입력 시간마다 호출됨
	 * 수행이 시작되고 1초뒤 수행
	 */
	@Scheduled(fixedRate = 1000)
	public void rateActionSch() {
		System.out.println("Sheduler time(fixedRate) : " + LocalDateTime.now());
	}
}

마지막으로 fixedRate 방식입니다. fixedDelay와 비슷하지만 종료시간이 기준이 아닌 시작시간이 기준으로 해당 스케줄러가 동작하고 n초 뒤에 동작합니다.

 

 

 

반응형