반응형

# 스프링 부트 스케줄러 적용방법

## EnableScheduling

  • 스프링 부트 프로젝트에서 Application에 아래의 어노테이션 적용
@EnableScheduling
  • 적용 예
package com.sbs.lhh.hp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class HpApplication {

	public static void main(String[] args) {
		SpringApplication.run(HpApplication.class, args);
	}

}

## Scheduled

  • 스케줄 작업을 진행할 항목에 아래의 어노테이션 적용
@Scheduled( 시간 설정 )
  • 적용 예
@Scheduled(cron = "0 0/30 * * * ?")
	public void autoGetCovid19Status() {
		System.out.println("작동확인");
		List<CovidData> covidDatas = articleService.getCovidData();
		
		List<CovidData> covidDataList;
		
		if ( covidDatas.isEmpty() ) {
			try {
				covidDataList = crawlingService.getCovidDatas();
				for (CovidData data : covidDataList) {
					articleService.setCovidData(data);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}	
		} else {
			try {
				covidDataList = crawlingService.getCovidDatas();

				for (CovidData data : covidDataList) {
					articleService.setCovidDataUpdate(data);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
반응형
반응형

# 게시판 리스팅되는 시간 측정 방법

  • controller에서 게시판 리스팅 되는 부분에 아래 코드를 입력하여 콘솔로 게시판 리스팅되는 시간을 측정할 수 있다.
// 게시판 리스팅 되는데 걸리는 시간 측정용
long startTime = System.nanoTime();

long endTime = System.nanoTime();
long estimatedTime = endTime - startTime;
nano seconds to seconds
double seconds = estimatedTime / 1000000000.0;
반응형
반응형

# 자바 크롤링

## 준비물

  • Jsoup : 자바로 만들어진 HTML parser로 DOM 구조를 추적하거나 CSS 선택자를 이용, 데이터를 찾아 추출할 수 있다.

## 라이브러리 추가

https://jsoup.org/download 접속하여 Jsoup jar파일을 모두 다운로드 후 프로젝트에 추가해 준다.

## 사용

  • ajax인 경우에는 해당방법으로 가져올 수 없음
public class CrawlingService {
	public void getCrawling() {
		// Jsoup를 이용해서 "사이트" 크롤링
		String url = "사이트 주소"; //크롤링할 url지정
		Document doc = null;	//Document에 페이지의 전체 소스가 저장된다
		
		try {
			doc = Jsoup.connect(url).get();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//select를 이용 원하는 태그를 선택(select는 원하는 값을 가져오기 위한 중요한 기능이다.)
		Elements element = doc.select(".covid19_datagroup");  
			
		element.select("em"); 

		String str = element.text();
		
		System.out.println("확인 : " + str); 

		System.out.println("============================================================");

		//Iterator을 사용 하나씩 값을 가져오기
		Iterator<Element> ie1 = element.select("strong.rank").iterator();
		Iterator<Element> ie2 = element.select("strong.title").iterator();
		        
		while (ie1.hasNext()) {
			System.out.println(ie1.next().text()+"\t"+ie2.next().text());
		}
		
		System.out.println("============================================================");
	}
}
  • 아래의 경우 ajax 크롤링 가능
String url = "https://www.sejong.go.kr/prog/fluInfo/listAjax.do";
		Document doc = null;
		try {
			doc = Jsoup.connect(url)
			        .header("origin", "https://www.sejong.go.kr/") // same-origin-polycy 로 인한 설정
			        .header("referer", "https://www.sejong.go.kr/") // same-origin-polycy 로 인한 설정
			        .ignoreContentType(true) // json 받아오려면 타입무시를 해야하는듯?
			        .get();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String json = doc.select("body").text();
반응형
반응형

# 자바 날짜 비교하여 날짜간의 차이 구하기.

  • 현재날짜와 기존에 등록된 날짜를 비교하여 며칠 차이나는지 구하여 로그인 시 장기간 동일한 비밀번호 사용에 따른 알림으로 비밀번호 변경을 요청 하는 등에 적용할 수 있다.
1. 비교에 앞서 현재 날짜, 비교할 날짜를 가져온다.

  // 현재 날짜 가져오기 (설정한 형식인 "yyyy-MM-dd HH:mm:ss" 대로 가져와진다.
  // current = "2020-08-29 21:58:50";	
  SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String current = format1.format(System.currentTimeMillis());

  // 저장된 날짜 or 임의의 날짜
  // member에 별도로 updateDate를 두어 이전 날짜를 기록해두었다.
  // String last = "2020-01-01 21:58:50"; 등으로 설정하여 사용 가능
  String last = member.getUpdateDate();	



2. 비교하여 차이 구하기

  // 날짜 차이를 담을 변수 생성
  long calDateDays = 0;

  try{
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 소문자mm으로 할 경우 분을 의미한다.

    // current, last 두 날짜를 parse()를 통해 Date형으로 변환.
    Date currentDate = format.parse(current);
    Date lastDate = format.parse(last);

    // Date로 변환된 두 날짜를 계산한 후, 리턴값으로 long type 변수를 초기화
    // 연산의 결과 -950400000 long type 으로 return
    long calDate = currentDate.getTime() - lastDate.getTime(); 

    // getTime()은 해당날짜를 기준으로1970년 00:00:00 부터 몇 초가 흘렀는지를 반환해준다. 
    // 24*60*60*1000(각 시간값에 따른 차이점) 을 나눠주면 일수가 나온다.
    calDateDays = calDate / ( 24*60*60*1000); 

    calDateDays = Math.abs(calDateDays);

    System.out.println("비밀번호 변경 후 소요된 기간 : "+calDateDays);
  }
  	catch(ParseException e) {
  	// 예외 처리
  }

 

반응형

'프로그래밍 > 자바, JDBC' 카테고리의 다른 글

게시판 리스팅되는 시간 측정 방법  (0) 2020.09.25
자바 크롤링  (0) 2020.09.04
lodash (throttle, debounce) 개념  (0) 2020.08.26
cannot be cast to java.lang.String 해결방법  (0) 2020.08.09
스프링 부트2  (0) 2020.08.03

+ Recent posts