您的位置:首页 > 数据库

crontab定时执行数据库查询

2014-04-18 09:50 99 查看
目标是每隔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.txt
java -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.txt
export LANG="zh_CN.UTF-8"
export JAVA_HOME=/usr/java/jdk1.6.0_43
export PATH=path...
export CLASSPATH=classpath...
echo $JAVA_HOME >>/test/log.txt
echo $PATH >>/tes/log.txt
echo $CLASSPATH >>/test/log.txt
java -jar /test/test.jar >>/test/log.txt
echo 结束 >>/test/log.txt

其中,还修正了日志文件编码错误的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: