오늘은 스케쥴링에 대해서 써보려고 한다.
개발하다보면 특정 시간에 함수가 호출 되었으면 하는게 있는데 그 부분을 구현해볼 것이다. 이러한 기능을 다행이 스프링프레임워크가 지원을 해주고있다.(없었다면 얼마나 힘들었을까?)
일단 ScheduledConfig Class를 작성해보자
ScheduledConfig.class
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
@EnableScheduling
public class ScheduledConfig {
public TaskScheduler scheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(4);
return scheduler;
}
}
간단하게 이러한 Config class 파일을 작성해 주면 된다. 중간에 보이는 setPollSize는 Thread Pool Size를 지정해준다. 당연하겠지만 스케쥴러는 메인 쓰레드가 아닌 다른 쓰레드로 동작하게 된다.
자 그리고 작동하게 할 Class를 만들어 보자.
DataScheduler.class
@Component
public class DataScheduler {
private static Logger logger = LoggerFactory.getLogger(DataScheduler.class);
@Scheduled(fixedDelay = 1000)
public void getStocksData() {
logger.info("1초마다 실행!");
}
}
이렇게 클래스를 스프링 빈 형태로 만들어 놓고 @Scheduled 어노테이션을 붙이면 실행하게 된다. 가로 안의 fixedDelay=1000 은 1초마다 실행하라는 뜻이다. cron을 사용 하면 매일 정각 12시, 월|수|금 6시에만 실행 등등 더욱더 포괄적으로 사용할 수 있다. 자세한 내용은 여기를 참고 하기 바란다.
config 파일을 작성하지 않고 하는 방법도 존재한다.
SpringApplication.class
@EnableScheduling
public class SpringApplication {
이렇게 메인문에다가 직접 추가 할수도있다. 이전에도 말했듯이... 필자는 메인문에 추가하는 것을 별로 좋아하지 않아서 config 파일을 만들어서 설정했다!
끗