[Spring] 함수를 예약해서 시간이 되었을 때 실행해보자.

코딩하는범이·2020년 12월 17일
0
post-thumbnail

오늘은 스케쥴링에 대해서 써보려고 한다.
개발하다보면 특정 시간에 함수가 호출 되었으면 하는게 있는데 그 부분을 구현해볼 것이다. 이러한 기능을 다행이 스프링프레임워크가 지원을 해주고있다.(없었다면 얼마나 힘들었을까?)

일단 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 파일을 만들어서 설정했다!

profile
기록 그리고 기억

0개의 댓글