본문 바로가기
개발아닌개발/springboot

GetMapping 반복 - Scheduler 실습하기

by 불청객 2021. 11. 8.
반응형

공공 오픈API 기능 테스트 중 @GetMapping으로 데이터를 가져오는 방법 구현 完 -> 포스트맨으로 확인 됨.

주기적으로 데이터를 받아와 서비스를 제공하는 것을 목표로 하기 때문에

스케줄러를 사용해보기로 함!

 

여기서 내가 사용한 스케줄러 방법은 Spring Scheduler

오픈API의 샘플을 참고하여 구현하였음.

사용한 오픈 API - 교통소통정보(고속도로 및 국도별 실시간 소통정보 데이터와 API를 제공합니다.) https://www.its.go.kr/opendata/opendataList?service=traffic

 

 

 

코드

Controller.java

* @Scheduled(fixedDelay = 3000) 추가

: 3초마다 반복한다. () 안에 들어가는 속성은 다양하니 필요에 따라 찾아서 작성하면 됨.

package com.example.restfulwebservice.openapi;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ctc.wstx.io.CharsetNames;

@RestController
public class Controller {
 
	@Scheduled(fixedDelay = 3000)
	@GetMapping("/api/traffic-info")
	public String callApi() throws IOException{

		StringBuilder result = new StringBuilder();
		
		String urlStr = "https://openapi.its.go.kr:9443/trafficInfo?" +
		"apiKey=test" +
		"&type=all" +
		"&minX=126.800000" +
		"&maxX=127.890000" +
		"&minY=34.900000" +
		"&maxY=35.100000" +
		"&getType=json";
		
		URL url = new URL(urlStr.toString());
		
		HttpURLConnection urlconnection = (HttpURLConnection)url.openConnection();
		urlconnection.setRequestMethod("GET");
		
		BufferedReader br;
		br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), "UTF-8"));
		
		String returnLine;
		
		while((returnLine = br.readLine())!= null) {
			result.append(returnLine);
			//result.append(returnLine+"\n");
		}
		urlconnection.disconnect();
		
		System.out.println(result.toString());
		return result.toString();
	}
}

 

xxxxxxApplication.java : 작성되어진 여러 import는 무시

* Application 클래스에 어노테이션 @EnableScheduling 추가

package com.example.restfulwebservice;

import java.util.Locale;

import org.hibernate.validator.spi.messageinterpolation.LocaleResolver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;


@EnableScheduling
@SpringBootApplication
public class RestfulWebServiceApplication {
	public static void main(String[] args) {
		SpringApplication.run(RestfulWebServiceApplication.class, args);
	}
}

 

 

 

 

실행결과 

결과를 즉시 보기위해 출력하였으며, 주기마다 잘 출력됨

728x90
반응형

댓글