[완료] java를 crontab실행시 jdbc로딩문제
오라클 jdbc를 연결해서 값을가져오는 java프로그램을 만들었습니다.
그냥 java실행하면 잘되는데요..
crontab 실행을 위해 sh파일을 만들어서 sh를 실행시키니깐
Class.forName("oracle.jdbc.driver.OracleDriver") 이거에 걸려서 안되요 ㅜㅜ
어떻게 해야 되는지 제발 알려주시면 정말정말 감사하겠습니다.
===test.sh====(classpath모두 잡아주었습니다.)
#!/usr/local/bin/bash
JAVA_HOME=/usr/local/java1.3
export JAVA_HOME
TOMCAT_HOME=/usr/local/jakarta_project/jakarta-tomcat-3.2.1
export TOMCAT_HOME
export JACARTA_HOME=/usr/local/jakarta_project
export STRUTS_HOME=$JACARTA_HOME/jakarta-struts-1.0-b1
export CLASSPATH=$CLASSPATH:$JACARTA_HOME/jakarta-tomcat-3.2.1/lib/ant.jar:
...... classpath 이하 중략......
/usr/local/java1.3/bin/java -cp /usr/local/jakarta_project/SOURCE/ICBS_SRC/Work/order/mail_send_log/Mail_schedule.jar Mail_schedule
========== Mail_schedule.java
public class Mail_schedule
{
private String mail_id;
private String send_gubun;
public Mail_schedule(String mail_id, String send_gubun){
this.mail_id = mail_id;
this.send_gubun = send_gubun;
}
public void All_send() {
try
{
........ 이하 중략 .........
} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 선택고객발송
public void each_send() {
try {
......... 이하 중략 .........
} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}
public static void main (String[] argv)
{
try {
String sqlQuery = " select * from mail_send_log where appoint_date = to_date(sysdate,'YY-mm-dd') and is_send=0 ";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String strUrl = "jdbc:oracle:thin:@1.1.1.1:1521:ELIM";
//Oracle JDBC Driver Load
System.out.println("JDBC Driver Load 이전 ");
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBC Driver Load 이후 ");
conn = DriverManager.getConnection( strUrl , "userid" , "pass" );
stmt = conn.createStatement();
rs = stmt.executeQuery( sqlQuery );
while(rs.next()) {
String mail_id = rs.getString("mail_id");
String send_gubun =rs.getString("send_gubun");
if(rs.getString("serviceid_value") == null|| rs.getString("serviceid_value").equals("")) {
Mail_schedule th = new Mail_schedule(mail_id,send_gubun);
th.All_send ();
}else {
Mail_schedule th = new Mail_schedule(mail_id,send_gubun);
th.each_send ();
}
}//while(rs.next
} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}
}
================== test.sh 실행시 결과======
JDBC Driver Load 이전
===================================
오라클 드러이버를...
오라클 JDBC 드라이버가 들어있는 jar 파일를 CLASS_PATH에 잡아주셨나요?? 그것만 해주면 해결 될 것 같네요.
그리고 Exception을 캐치해놓고서 아무것도 안하는 부분이 있는데요..
그거 매우 안좋은 습관입니다.
아예 catch를 하지말고 위로 넘기든지, log로 남기는 처리를 하든지 해야합니다.
그래서 Exception이 화면에 찍히기라도 해야 원인이 뭔지 파악을 할 수 있겠죠?
이 소스는 Exception을 먹어버리기 때문에 저 결과만 봐서는 원인을 알 수가 없어요..
그리고 저 같은 경우에는 Java로 작성된 싸이트를 관리하는데요, 개발은 물론 Java로 하지만, 관리는 Python으로 하고있습니다.
정말 편하더군요.
script 만들어서 바로바로 테스트하고, 배포하고.
가능하시다면 Python/Ruby/Perl 같은 스크립트 언어 배우셔서 관리하는거 추천합니다.
http://kwon37xi.egloos.com
jar 파일 classpath잡아줬는데요..그래도 안되네요.
classpath를 잡아주었습니다. 아래처럼..
그런데도...여전히 똑같아요ㅜㅜ
export CLASSPATH=$CLASSPATH:/usr/local/java1.3/lib/classes12.jar:
export CLASSPATH=$CLASSPATH:$/usr/local/jakarta_project/jakarta-tomcat-3.2.1/lib/classes12.jar:
exception이요.
앞서 말씀드렸다싶이.
Exception을 찍어보세요.
그래야 왜 오류가 발생하는지 정확히 알수 있지요. Exception만 찍어보면 스스로 해결하실 수 있을겁닙다.
http://kwon37xi.egloos.com
http://kwon37xi.egloos.com
에러를 찍어보니...jdbc class를 찾지 못하는걸로 나오네요
에러내용이..
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
jdbc 드라이버를 찾지를 못하네요..
classpath에 잡아줬는데두...왜 못잡는지...
!
/usr/local/java1.3/bin/java -cp $CLASSPATH:/usr/local/jakarta_project/SOURCE/ICBS_SRC/Work/order/mail_send_log/Mail_schedule.jar Mail_schedule
http://kwon37xi.egloos.com
아..감사합니다~ cron은 제대로 실행되는데..
jdbc 클래스는 이제 제대로 찾아요..
sh 실행시 java프로그램이 잘 실행되는데요..
crontab에 등록시켰을때는
Mail_schedule.java의 rs = stmt.executeQuery( sqlQuery ); 이 실행이 되지 않는것 같아요..
while(rs.next()) 안에것들이 실행이 안되요..ㅜㅜ
해결했습니다.
쿼리가 시스템 시간에 맞는 데이터를 가져오는거였는데
crontab에서 돌리니깐 이 시스템시간의 값이 안됐었네요..
이 구문을빼고 하니깐 되네요...감사합니다.
댓글 달기