目标是每隔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
其中,还修正了日志文件编码错误的问题。