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
其中,还修正了日志文件编码错误的问题。
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
其中,还修正了日志文件编码错误的问题。
相关文章推荐
- linux定时备份mysql数据库,及解决crontab执行时生成数据库文件为空的问题
- crontab定时执行php脚本备份数据库
- linux定时备份mysql数据库,及解决crontab执行时生成数据库文件为空的问题
- Linux-crontab定时执行sh脚本进行数据库备份
- centos linux 定时任务 定时每天执行php文件更新数据库 crontab
- crontab创建定时任务执行mapreduce,并将输出Load到数据库
- crontab定时执行php脚本备份数据库
- linux定时执行crontab 执行数据库备份
- ubuntu定时执行任务crontab的使用
- C# 连接数据库MySql并执行查询命令
- Linux的crontab命令执行定时任务
- CentOS crontab定时任务不执行的解决
- linux下使用crontab定时执行脚本
- linux 下执行sh dkfdailyreport.sh没问题,用crontab定时执行有问题
- crontab 定时执行任务命令详解
- Centos7:利用crontab定时执行任务
- 定时执行crontab使用方法详解
- linux开机启动任务和定时执行任务 crontab
- tomcat启动时就 对数据库执行关键数据的查询(ssm框架)
- crontab执行定时任务--tp3.2例