定时器有执行,但是里面的方法没有正常执行,也没有发现报错
版本:renren-security 1.1 |
开发环境:谷歌 |
虽然我提的问题有点大,但是还是想提一下
1、在使用定时器的时候,点击立刻执行,方法执行一些正常;
2、在11:10修改corn表达式为(0 22 11 * * ?)的时候也正常执行,但是把它修改到(0 0 23 * * ?)作者(0 30 1 * * ?)的时候,定时器有执行,但是里面的方法就没有执行正常;
3、方法中只报了这些问题:但是点击立刻执行的时候也会报这些问题,但是可以正常执行而将定时器修改为(0 0 23 * * ?)作者(0 30 1 * * ?),就只能执行定时器,而方法不能正常之 心
ORA-01000: 超出打开游标的最大数
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
ORA-01000: 超出打开游标的最大数
4、下面是我的源码(功能是将数据同mysql同步到oracle中)
public void mysqlToOracle(String params) {
JSONObject jsonObject = JSONObject.parseObject(params);
int days = jsonObject.getInteger("days");
logger.info("开始新闻同步,正在被执行,参数为:" + days);
Connection con = null;// 创建一个数据库连接
PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
ResultSet result = null;// 创建一个结果集对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = new Date();
String begin_time = sdf.format(date1);
long startTime = System.currentTimeMillis();
Date date2 = null;
String end_time = null;
long endTime;
String sync_time;
String sync_table = "cms_article_sjzhmh";
int sync_type = 1;
try {
// Class.forName("com.mysql.jdbc.Driver");// 加载Oracle驱动程序
// String url = mysqlurl;
// String user = mysqlname;// 用户名,系统默认的账户名
// String password = mysqlpassword;// 你安装时选设置的密码
// con = DriverManager.getConnection(url, user, password);// 获取连接
con = secondDataSource.getConnection();
logger.info("连接mysql数据户成功");
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -days);//添加days参数,表示同步多少天前之后的数据
//calendar.set(Calendar.HOUR,calendar.get(Calendar.HOUR) - 4);
date = calendar.getTime();
String nowDate = sdf.format(date);
logger.info("当前系统时间为:" + nowDate);
String sql = "select * from cms_article_sjzhmh t where 1=1 and create_time >= " + "'" + nowDate + "'";// 预编译语句,“?”代表参数
logger.info("查询mysql的sql语句:" + sql);
pre = con.prepareStatement(sql);// 实例化预编译语句
result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数
importData(result, begin_time, startTime, sync_table);
} catch (Exception e) {
logger.error("查询cms_article_sjzhmh出错:"+e);
e.printStackTrace();
} finally {
try {
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (pre != null)
pre.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String importData(ResultSet result, String begin_time, long startTime, String sync_table) {
Date date2 = null;
String end_time = null;
long endTime;
long syncTime;
String sync_time = null;
int success_num = 0;
int fail_num = 0;
String failure_result = null;
int sync_type = 1;
Connection con = null;// 创建一个数据库连接
PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String begingTime = formatter.format(currentTime);
try {
logger.info("开始连接oracle数据库,准备插入数据cms_article");
con = firstDataSource.getConnection();
while (result.next()) {
/*String id = getUUID();
String entryType = getEntryType(result
.getString("CHANNEL_CODE"));*/
int data_type = 0;
if (result.getString("data_type") != null) {
if (result.getString("data_type").equals("null")) {
data_type = 0;
} else if (result.getString("data_type").equals("")) {
data_type = 0;
} else {
data_type = Integer.parseInt(result.getString("data_type"));
}
} else {
data_type = 0;
}
String sql = " insert into cms_article(aid,title,status,brief,img_url,content,release_time," +
"source,author,is_top,display_type,menu_name,art_type,more_img,data_type,create_time,area_code) "
+ " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
pre = con.prepareStatement(sql);// 实例化预编译语句
String content = result.getString("content");
Clob clob = con.createClob();
clob.setString(1,content);
if (clob instanceof com.alibaba.druid.proxy.jdbc.ClobProxyImpl) {
com.alibaba.druid.proxy.jdbc.ClobProxyImpl impl = (com.alibaba.druid.proxy.jdbc.ClobProxyImpl) clob;
clob = impl.getRawClob(); // 获取原生的这个 Clob
}
pre.setClob(6, clob);
pre.setString(1, result.getString("aid"));
pre.setString(2, result.getString("title"));
pre.setInt(3, result.getInt("status"));
pre.setString(4, result.getString("brief"));
pre.setString(5, result.getString("img_url"));
// pre.setClob(6, clob);
pre.setString(7, result.getString("create_time"));//爬去时间
pre.setString(8, result.getString("source"));
pre.setString(9, result.getString("author"));
pre.setInt(10, result.getInt("is_top"));
pre.setInt(11, result.getInt("display_type"));
pre.setString(12, result.getString("menu_name"));
pre.setString(13, result.getString("art_type"));
pre.setString(14, result.getString("more_img"));
pre.setInt(15, data_type);
pre.setString(16, result.getString("release_time"));//发布时间
pre.setString(17, result.getString("area_code"));
try {
pre.execute();
success_num += 1;
logger.info("插入成功第" + (success_num) + "条数据");
} catch (SQLException e) {
fail_num += 1;
sync_type = 0;
failure_result = e.getMessage();
String art_id = result.getString("aid");
String art_title = result.getString("title");
String art_brief = result.getString("brief");
logger.error("插入第" + (success_num) + "条数据失败");
/*try {
insertFailSql(art_id, art_title, art_brief, failure_result, begin_time);
} catch (Exception e1) {
e1.printStackTrace();
}*/
continue;
}
//pre.close();
}
date2 = new Date();
end_time = formatter.format(date2);
endTime = System.currentTimeMillis();
syncTime = endTime - startTime;
sync_time = String.valueOf(syncTime) + "ms";
insertSql(begin_time, end_time, sync_time, sync_table, success_num, fail_num, sync_type, failure_result);
} catch (Exception e) {
e.printStackTrace();
logger.error("总插入oracle数据数据出错");
} finally {
try {
// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
// 注意关闭的顺序,最后使用的最先关闭
if (result != null)
result.close();
if (pre != null)
pre.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
public void insertSql(String begin_time, String end_time, String sync_time, String sync_table, int success_num, int fail_num, int sync_type, String failure_result) {
logger.info("财政新闻资讯同步日志,正在被执行");
Connection con = null;// 创建一个数据库连接
PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
try {
con = firstDataSource.getConnection();
ProfileUtil profileUtil = new ProfileUtil();
long log_sync_id = profileUtil.getAtomicCounter();
String sql = " insert into cms_sync_log (log_sync_id,begin_time,end_time,sync_time,sync_table,success_num,fail_num,sync_type,failure_result) "
+ " values ('" + log_sync_id + "', '" + begin_time + "','" + end_time + "','" + sync_time + "','" + sync_table + "','" + success_num + "','" + fail_num + "','" + sync_type + "','" + failure_result + "') ";
pre = con.prepareStatement(sql);// 实例化预编译语句
logger.info("日志sql语句:" + sql);
pre.executeUpdate();
//result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数
} catch (Exception e) {
logger.error("同步日志出错");
e.printStackTrace();
} finally {
try {
if (pre != null)
pre.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
盼望指教,万分感谢!img[//cdn.renren.io/cbcc5201905131141048556.png]