DBILITY

java timeserver 시간 확인하기 본문

java/basic

java timeserver 시간 확인하기

DBILITY 2017. 12. 26. 22:03
반응형

서버시간의 오차가 많이 발생한다.
윈도우2012던가에서 자꾸 발생했는데, 저 경우는 대부분 윈도우 타임서버에 문제가 있다.
time2.kriss.re.kr이나 time.bora.net으로 변경해주면 잘되는데,각 서버간의 시간이 달라서야
APP에서 SQL에 시간을 일일이 넣어서 사용해야 하나?!

윈도우10에서 명령창에 w32tm /query /verbose 해보자.

time서비스가 실행중이지 않으면 실행으로 
서버시간마저 스케줄링을 해야하는 건가?

apache-commons-net을 사용했다.

<dependency>
	<groupId>commons-net</groupId>
	<artifactId>commons-net</artifactId>
	<version>3.2</version>
</dependency>
package com.dbility.batch;

import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
*
* Description
*
*
* @author hyperrookie@gmail.com
*
* @version 1.0.0
* @date 2017. 12. 26.
*=======================================================================
* Date            Name                     Revision History
*=======================================================================
* 2017. 12. 26.   hyperrookie@gmail.com    Creation
*=======================================================================
*/
public class TimeChecker {

	private static final Logger LOG = LoggerFactory.getLogger(TimeChecker.class);

	public static void main(String[] args) {

		String[] timeServer = {"time2.kriss.re.kr","time.kriss.re.kr","time.bora.net","time.windows.com",
							   "0.pool.ntp.org","1.pool.ntp.org","2.pool.ntp.org","3.pool.ntp.org"};

		NTPUDPClient client = new NTPUDPClient();
		client.setDefaultTimeout(10000);
		boolean next = true;
		try {
			client.open();

			for (String server : timeServer) {
				if ( next ) {
					try {
						InetAddress inetAddress = InetAddress.getByName(server);
						TimeInfo timeInfo = client.getTime(inetAddress);
						long returnTime = timeInfo.getReturnTime();
						Date time = new Date(returnTime);
						//Date localTime = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("2017-12-27 09:21:00");
						Date localTime = new Date();
						long timeGap = Math.abs(time.getTime()-localTime.getTime())/1000;

						LOG.info("time : {}, {}", server,new Object[]{time,localTime,timeGap});
						if (timeGap > 300) {
							LOG.info("{}", "표준시간과 시스템간 시간차가 5분이상~서버시간을 확인하셔~");
						}
						next = false;
						break;
					} catch (UnknownHostException ue) {
						LOG.info("server error : {}", server, ue.getMessage());
						ue.printStackTrace();
					} catch (SocketTimeoutException skte) {
						LOG.info("server error : {}", server, skte.getMessage());
						skte.printStackTrace();
					} catch (IOException ioe) {
						LOG.info("server error : {}", server, ioe.getMessage());
						ioe.printStackTrace();
					}/* catch (ParseException pe) {
						pe.printStackTrace();
					}*/
				}
			}

		} catch (SocketException ske) {
			LOG.info("error : {}", ske.getMessage());
			ske.printStackTrace();
		} finally {
			client.close();
		}
	}
}

 

반응형
Comments