博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
crontab定时执行数据库查询
阅读量:4973 次
发布时间:2019-06-12

本文共 2701 字,大约阅读时间需要 9 分钟。

目标是每隔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

其中,还修正了日志文件编码错误的问题。

转载于:https://www.cnblogs.com/newyear/p/3672462.html

你可能感兴趣的文章
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>