이것도 역시 혹시나 해서....
급하게 대충 짰다.
간단명료 설명
AP <--> DB (JDBC 11g) 드라이버를 이용해서 현재 날짜 조 회 후 조회한 값을 로그에 쌓는 프로그램
만약 에러가 발생하게 되면 에러 내용도 그대로 찍히도록 구현함
package exam;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Schedule {
public static void main(String[] args) {
int sleepSec = 5;
final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
final SimpleDateFormat sf = new SimpleDateFormat("HH");
exec.scheduleAtFixedRate(new Runnable() {
public void run() {
try {
Calendar cal = Calendar.getInstance();
String hour = sf.format(cal.getTime());
boolean result = timeChk(hour);
if(result) {
String connect_text = connection();
work(connect_text);
} else {
sleep(1000 * 60 * 60);
}
} catch (Exception e) {
e.printStackTrace();
exec.shutdown();
}
}
}, 5, sleepSec, TimeUnit.MINUTES);
}
public static void sleep(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
}
}
public static boolean timeChk(String time) {
boolean flag = false;
if("23".equals(time)) {
flag = true;
} else if ("00".equals(time)) {
flag = true;
} else if ("01".equals(time)) {
flag = true;
} else if ("02".equals(time)) {
flag = true;
} else if ("03".equals(time)) {
flag = true;
} else if ("04".equals(time)) {
flag = true;
} else if ("05".equals(time)) {
flag = true;
} else if ("06".equals(time)) {
flag = true;
}
return flag;
}
public static void work(String connect_text) {
try {
Process p = Runtime.getRuntime().exec("netstat -an");
byte[] msg = new byte[128];
int len;
String result = "";
while ((len = p.getInputStream().read(msg)) > 0) {
result += new String(msg, 0, len);
}
result += "\r\n";
result += "(DB Select (-ano))";
result += "\r\n";
result += connect_text;
fileMake(result, "ano");
p.destroy();
Process p2 = Runtime.getRuntime().exec("netstat -bno");
byte[] msg2 = new byte[128];
int len2;
String result2 = "";
while ((len2 = p2.getInputStream().read(msg2)) > 0) {
result2 += new String(msg2, 0, len2);
}
result2 += "\r\n";
result2 += "(DB Select (-bno))";
result2 += "\r\n";
result2 += connect_text;
fileMake(result2, "bno");
p2.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void fileMake(String msg, String type) {
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
String now = sf.format(date);
String logLoot = "D:/Folder/";
String logPath = logLoot + "/";
String fileNm = now + "_" + type + ".log";
File dir = new File(logPath);
if (!dir.isDirectory()) {
dir.mkdirs();
}
try {
FileWriter fw = new FileWriter(new File(logPath + fileNm), true);
fw.write(msg);
BufferedWriter out = new BufferedWriter(fw);
out.newLine();
fw.flush();
out.close();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String connection() {
String DB_URL = "jdbc:oracle:thin:@ip:1521:sid";
String DB_USER = "user";
String DB_PASSWORD = "pwd";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String query = "select sysdate from dual";
String result = "";
try {
// 드라이버를 로딩한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e ) {
result = makeStackTrace(e);
}
try {
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
while (rs.next()) {
String time = rs.getString(1);
result = time;
}
} catch (Exception e) {
result = makeStackTrace(e);
} finally {
try {
if(rs != null) {rs.close();}
if(stmt != null) {stmt.close();}
if(conn != null) {conn.close();}
} catch (SQLException e) {
result = makeStackTrace(e);
}
}
return result;
}
public static String makeStackTrace(Throwable t) {
if (t == null)
return "";
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
t.printStackTrace(new PrintStream(bout));
bout.flush();
String error = new String(bout.toByteArray());
return error;
} catch (Exception ex) {
return "";
}
}
}
'Web > 현업 경험' 카테고리의 다른 글
다음맵 마커 커스텀 상자 만들기 (0) | 2018.10.19 |
---|---|
휴면계정 자동 전환 기능 설계 (0) | 2018.04.26 |
오라클 외부 접근 가능하도록 설정하기 (0) | 2017.02.23 |
DB Link 시켜주는 방법 (0) | 2017.01.25 |
Toad for Oracle 에서 DB Export 하기 (0) | 2016.12.22 |