Scheduler란?
Scheduler는 특정시간에 주기적으로 작업을 실행하고 싶을때 주로 사용한다.
나같은 경우는 매일 밤 11시에 날씨 API를 호출해야해서 Scheduled를 사용하였다.
그럼 이제 사용법부터 알아보자.
사용법을 아래와 같다.
1. Main클래스에 @EnabledScheduling annotation을 입력을 한다.
2. 주기적으로 실행할 작업에 @Scheduled annotation을 사용한다.
그럼이제 각각의 순서에 대해서 알아보자.
1. Main클래스에 @EnabledScheduling annotation을 입력을 한다.
이건 말 그대로 Main함수가 있는 Main 클래스에 @EnabledScheduling annotation을 적어준다.
@EnableScheduling
@SpringBootApplication(scanBasePackages= {"com.wook.controller","com.wook.model","com.wook.service"})
public class Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Application.class, args);
}
}
2. 주기적으로 실행할 작업에 @Scheduled annotation을 사용한다.
주기적으로 실행할 작업에 @Schduled annotation을 아래와 같이 적어주면 된다.
@Scheduled(cron="0 5 23 * * *", zone = "Asia/Seoul")
public void callAPi() throws InterruptedException {
swrList = new ArrayList<>();
//DB에 저장된 GeoInfo 정보를 ShortWeatherReq List에 추가한다.
for(GeoInfo gi : gs.getGeoXY()) {
swr = new ShortWeatherReq(APK.getApiKey(),gi.getX(),gi.getY());
swr.setBaseDate(); //현재 날짜로 baseDate를 설정하는 메소드를 호출
swr.setNx(gi.getX()); //x좌표값 저장
swr.setNy(gi.getY()); //y좌표값 저장
swrList.add(swr); //list에 swr 추가
}
//위 객체를 가지고 이제 API를 호출할수 있게 Service에게 전해줘야 함
sws.setSwrList(swrList);
temperList = sws.callSW(); // API 통신 Service 호출
logger.info("-------------------");
logger.info("API ConnectionSuccess");
logger.info("-------------------");
//List에 담긴 온도 DB에 저장
for(int i = 0;i<temperList.size();i++) {
Temperature temp = temperList.get(i);
ts.saveTemp(temp);
}
logger.info("DB Store Success");
}
@Schduled annotation 괄호 안에 cron을 적었는데 cron이 뭐냐면 주기적으로 실행할 특정 시간을 결정 짓는것이다.
"초 분 시 일 월 요일" 이렇게 정해주면 된다.
나같은 경우는 23시 15분에 한번 호출을 원하니
"0 15 23 * * *"로 적어주었다.
그러면 날짜에 관계없이 무조건 23시 15분에 해당 메소드가 호출이 되는것이다.
그리고 zone 이라는것을 적어주었는데. zone은 날짜나 시간을 어떤걸 기준으로 하는것이냐를 입력하는것이다.
나는 당연히 서울이니까 zone = "Asia/Seoul"로 설정을 해주었다.
timezone에 대해서 자세히 알고싶으면 아래 링크를 통해서 알아보면 된다.
https://docs.oracle.com/cd/B13866_04/webconf.904/b10877/timezone.htm
이처럼 cron과 zone 말고도 다른 속성들이 존재하는데 그 속성들은 아래와 같다.
fixedDelay : 작업이 끝난 시점 기준, milliseconds 마다 동작
fixedDelayString : fixedDelay와 동일, 속성값만 String으로 입력
fixedRate : 작업이 시작한 시점 기준, milliseconds 마다 동작
fixedRateString : fixedRate와 동일, 속성값만 String으로 입력
initialDelay : 최초 수행 지연 시간, milliseconds 이후에 실행
initialDelayString : initialDelay와 동일, 속성값만 String으로 입력
'코딩일기 > 날씨앱 만들기 프로젝트' 카테고리의 다른 글
[Spring Boot] RestAPI 만들기 예제 (0) | 2021.12.16 |
---|---|
[RestAPI] Rest, RestAPI 설명 및 설계 규칙 (0) | 2021.12.16 |
[Java] CompletionHandler를 이용한 Thread 콜백 구현 (0) | 2021.12.02 |
[Java] Thread Pool 설명 및 사용 방법 (0) | 2021.11.21 |
[Java] Thread 설명 및 사용법 (0) | 2021.11.16 |