目标是每隔5分钟执行一次数据库查询。
1、数据库查询,使用的是JDBC,代码如下:
import org.junit.Test;
import java.sql.*;
public class JDBCTest {
// 数据库驱动程序 private final static String DBDRIVER = "oracle.jdbc.driver.OracleDriver"; // 数据库连接地址 private final static String DBURL = "";// 数据库用户名
private final static String DBUSER = "name"; // 数据库连接密码 private final static String DBPASSWORD = "password"; // 声明一个数据库连接对象 public static Connection conn = null; // 建立SQL陈述式对象(Statement Object) public static Statement stmt; // 查询结果 public static ResultSet rs;@Test
public void jdbcTest(){ conn = getConnection(); try { System.out.println("读取数据>>>>>>>>>>>>>>>>"); StringBuffer sql = new StringBuffer(); sql.append("SELECT t.id,t.name FROM A_TABLE t");stmt = conn.createStatement();
System.out.println("连接已经建立>>>>>>>>>>>>>>>>"); System.out.println("正在进行查询操作,查询时间会很长,请耐心等候>>>>>>>>>>>>>>>>"); rs = stmt.executeQuery(sql.toString()); while(rs.next()){ String st1=rs.getString(1); String st2=rs.getString(2); System.out.println("st1:"+st1); System.out.println("st2:"+st2); }} catch (SQLException e) {
System.out.println("查询出错>>>>>>>>>>>>>>>>"); e.printStackTrace(); } finally { close(); System.out.println("结束>>>>>>>>>>>>>>>>"); } }// 获取数据库连接
public static Connection getConnection() { try { Class.forName(DBDRIVER); Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD); return conn; } catch (Exception e) { System.out.println("创建连接出错------connect wrong33"); e.printStackTrace(); return null; } }// 关闭数据库连接
public static void close() { if (stmt != null) { try { stmt.close(); System.out.println("stmt已经正常关闭>>>>>>>>>>>>>>>>stmt close 99"); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); System.out.println("conn已经正常关闭>>>>>>>>>>>>>>>>conn close 88"); } catch (SQLException e) { e.printStackTrace(); } } }}
2、将编好的查询数据库代码打成jar包,命名为test.jar,部署。
3、编写bash文件,命名test.bash,执行jar包,内容如下:
#!/bin/sh
echo 进入bash >>/test/log.txtjava -jar /test/test.jar echo 结束 >>/test/log.txt编写完成后,执行bash,命令为./test.bash,报permission denied,没有权限。此时执行下列语句,chmod 777 test.bash即可。
4、将test.bash加入到crontab执行。
输入命令crontab -e,进行编辑,添加下面代码:
*/5 * * * * /test/test.bash
即可五分钟执行一次。
5、测试发现,经过上面步骤,代码并未按时执行,手动执行bash文件无错误。加入日志查看语句,发现代码按时执行了,但数据库未连接成功。
处理方法,crontab里环境变量有问题,修改test.bash,PATH重新赋值,CLASSPATH加入test.jar中使用的jar的路径到环境变量即可。test.bash修改后如下:
#!/bin/sh
echo 开始进入bash >>/test/log.txtexport LANG="zh_CN.UTF-8"export JAVA_HOME=/usr/java/jdk1.6.0_43export PATH=path...export CLASSPATH=classpath...echo $JAVA_HOME >>/test/log.txtecho $PATH >>/tes/log.txtecho $CLASSPATH >>/test/log.txtjava -jar /test/test.jar >>/test/log.txtecho 结束 >>/test/log.txt其中,还修正了日志文件编码错误的问题。