当前位置:编程学习 > JAVA >>

求助spring定时器 每秒钟扫描查询数据库 执行一段时间后就timer停了???怎么回事啊? ??

把与数据库操作的代码去掉 ,不执行增删等操作,定时器就不会停,一直周期循环执行下去,    
但是一旦与数据库操作,定时器执行一段时间就不执行了
怎么回事啊???求大神们指导。。。 
什么原因造成的??怎么解决?? ? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- // 运行时可通过动态注入的scheduler得到trigger
executeJobDetail();
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger", scheduler.DEFAULT_GROUP);
String dbCronExpression = getCronExpressionFromDB(); // 查询的数据库时间
// 如果dbCronExpression==null说明当天所有的定时任务都执行完了
if (dbCronExpression == null) {
String cornExp = "10 00 00 * * ?"; // 设置成凌晨12点再次执行 便于重新生成去数据查询 第二天的定时任务 进行周期执行
dbCronExpression = cornExp;
}
String originConExpression = trigger.getCronExpression(); // 原始的cron时间
// 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
// 下面是具体的job内容,可自行设置
if (!originConExpression.equalsIgnoreCase(dbCronExpression)) {
// trigger.setCronExpression(dbCronExpression);
// scheduler.deleteJob("schedulerJobDetail", scheduler.DEFAULT_GROUP);
System.out.println("success!");
CronTriggerBean newTrigger=(CronTriggerBean)trigger.clone();
newTrigger.setCronExpression(dbCronExpression);
JobDetail newJobDetail=newTrigger.getJobDetail();
scheduler.deleteJob("schedulerJobDetail", scheduler.DEFAULT_GROUP);
scheduler.scheduleJob(newJobDetail, newTrigger); --------------------编程问答-------------------- // 运行时可通过动态注入的scheduler得到trigger
executeJobDetail();
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger", scheduler.DEFAULT_GROUP);
String dbCronExpression = getCronExpressionFromDB(); // 查询的数据库时间
// 如果dbCronExpression==null说明当天所有的定时任务都执行完了
if (dbCronExpression == null) {
String cornExp = "10 00 00 * * ?"; // 设置成凌晨12点再次执行 便于重新生成去数据查询 第二天的定时任务 进行周期执行
dbCronExpression = cornExp;
}
String originConExpression = trigger.getCronExpression(); // 原始的cron时间
// 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
// 下面是具体的job内容,可自行设置
if (!originConExpression.equalsIgnoreCase(dbCronExpression)) {
// trigger.setCronExpression(dbCronExpression);
// scheduler.deleteJob("schedulerJobDetail", scheduler.DEFAULT_GROUP);
System.out.println("success!");
CronTriggerBean newTrigger=(CronTriggerBean)trigger.clone();
newTrigger.setCronExpression(dbCronExpression);
JobDetail newJobDetail=newTrigger.getJobDetail();
scheduler.deleteJob("schedulerJobDetail", scheduler.DEFAULT_GROUP);
scheduler.scheduleJob(newJobDetail, newTrigger);

这是动态改变corn 表达式代码 帮我看看是什么问题

第一次同一时间执行一次 

第二次同一时间 执行 了两次 
定时器 就停了 不在 执行了 









--------------------编程问答-------------------- 一秒一次??换时间长点试试,可能服务器响应不过来。。 --------------------编程问答-------------------- 谁用过 Quartz 定时器的?

动态 改变 cron表达式 

实现动态定时器 执行

--------------------编程问答-------------------- 动态改变CRON表达式的话你可以写个线程,每隔多长时间去扫描你数据库配置的这个CRON表达式有没有变化,变化的话就将当前触发器停止,重新建立一个触发器,这只是我想的一种方法 --------------------编程问答-------------------- 为什么要每秒扫描一次数据库!不觉得费资源吗?建议给个时间触发才去执行后面的事情。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,