본문 바로가기

Web/현업 경험

AP와 DB서버 JDBC 드라이버로 통신 로그 쌓이는 프로그램

이것도 역시 혹시나 해서....
급하게 대충 짰다.

간단명료 설명 

          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 "";
  }
 }
}