spring quatz动态设置定时任务时报错,
配置文件:<bean id="testAction"
class="com.huapu.lpmis.web.action.jobinfo.JobTest">
<property name="scheduler" ref="schedulerFactory" />
<property name="jobInfoService" ref="jobInfoService" />
</bean>
<bean id="schedulerJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testAction" />
<property name="targetMethod" value="reScheduleTestJob" />
<property name="concurrent" value="false" />
</bean>
<bean id="jobTestTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="schedulerJobDetail" />
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>
<bean id="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="jobTestTrigger" />
</list>
</property>
</bean>代码:private Scheduler scheduler;
private JobInfoServiceIface jobInfoService;
public Scheduler getScheduler() {
return scheduler;
}
public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
public JobInfoServiceIface getJobInfoService() {
return jobInfoService;
}
public void setJobInfoService(JobInfoServiceIface jobInfoService) {
this.jobInfoService = jobInfoService;
}
public void reScheduleTestJob() throws SchedulerException, ParseException{
// 运行时可通过动态注入的scheduler得到trigger
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", "aa");
String dbCronExpression = getCronExpressionFromDB();
String originConExpression = trigger.getCronExpression();
// 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
if(!originConExpression.equalsIgnoreCase(dbCronExpression)){
trigger.setCronExpression(dbCronExpression);
scheduler.rescheduleJob("jobTestTrigger", Scheduler.DEFAULT_GROUP, trigger);
}
// 下面是具体的job内容,可自行设置
excuteJobDetail();
}
private String getCronExpressionFromDB() {
DetachedCriteria detachedCriteria = DetachedCriteria
.forClass(JobDetail.class);
detachedCriteria.addOrder(Order.asc("CreateTime"));
//暂时不知道得到的是什么
detachedCriteria.add(Restrictions.eq("Id", "aa"));
// List jobDetailList = jobInfoService.queryJobInfo(detachedCriteria);
JobInfo jobInfo = new JobInfo();
jobInfo = jobInfoService.getJobInfoById("aa");
// jobInfo = (JobInfo)jobDetailList.get(0);
String dbCronExpression = jobInfo.getCronExpression();
return dbCronExpression;
}
public void excuteJobDetail(){
System.out.println("Ha, This is my job");
System.out.println("You are welcome!!!!!! The time is"+ new Date());
}报错位置:
// 运行时可通过动态注入的scheduler得到trigger
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", "aa");报错如下:
[lpmis] DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] SimpleJobFactory.newJob(46) | Producing instance of Job 'DEFAULT.schedulerJobDetail', class=org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$StatefulMethodInvokingJob
[lpmis] DEBUG [DefaultQuartzScheduler_Worker-8] JobRunShell.run(194) | Calling execute on job DEFAULT.schedulerJobDetail
[lpmis] WARN [DefaultQuartzScheduler_Worker-8] MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(168) | Could not invoke method 'reScheduleTestJob' on target object [com.huapu.lpmis.web.action.jobinfo.JobTest@109506a]
java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean
at com.huapu.lpmis.web.action.jobinfo.JobTest.reScheduleTestJob(JobTest.java:39)
at sun.reflect.GeneratedMethodAccessor80.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
[lpmis] INFO [DefaultQuartzScheduler_Worker-8] JobRunShell.run(200) | Job DEFAULT.schedulerJobDetail threw a JobExecutionException:
org.quartz.JobExecutionException: Could not invoke method 'reScheduleTestJob' on target object [com.huapu.lpmis.web.action.jobinfo.JobTest@109506a] [See nested exception: java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean]
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:174)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean
at com.huapu.lpmis.web.action.jobinfo.JobTest.reScheduleTestJob(JobTest.java:39)
at sun.reflect.GeneratedMethodAccessor80.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)折腾了半天,没找到错误原因,请大家帮忙看看,谢啦!!!
配置文件:<bean id="testAction"
class="com.huapu.lpmis.web.action.jobinfo.JobTest">
<property name="scheduler" ref="schedulerFactory" />
<property name="jobInfoService" ref="jobInfoService" />
</bean>
<bean id="schedulerJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="testAction" />
<property name="targetMethod" value="reScheduleTestJob" />
<property name="concurrent" value="false" />
</bean>
<bean id="jobTestTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="schedulerJobDetail" />
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>
<bean id="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="jobTestTrigger" />
</list>
</property>
</bean>代码:private Scheduler scheduler;
private JobInfoServiceIface jobInfoService;
public Scheduler getScheduler() {
return scheduler;
}
public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
public JobInfoServiceIface getJobInfoService() {
return jobInfoService;
}
public void setJobInfoService(JobInfoServiceIface jobInfoService) {
this.jobInfoService = jobInfoService;
}
public void reScheduleTestJob() throws SchedulerException, ParseException{
// 运行时可通过动态注入的scheduler得到trigger
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", "aa");
String dbCronExpression = getCronExpressionFromDB();
String originConExpression = trigger.getCronExpression();
// 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等
// 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob
if(!originConExpression.equalsIgnoreCase(dbCronExpression)){
trigger.setCronExpression(dbCronExpression);
scheduler.rescheduleJob("jobTestTrigger", Scheduler.DEFAULT_GROUP, trigger);
}
// 下面是具体的job内容,可自行设置
excuteJobDetail();
}
private String getCronExpressionFromDB() {
DetachedCriteria detachedCriteria = DetachedCriteria
.forClass(JobDetail.class);
detachedCriteria.addOrder(Order.asc("CreateTime"));
//暂时不知道得到的是什么
detachedCriteria.add(Restrictions.eq("Id", "aa"));
// List jobDetailList = jobInfoService.queryJobInfo(detachedCriteria);
JobInfo jobInfo = new JobInfo();
jobInfo = jobInfoService.getJobInfoById("aa");
// jobInfo = (JobInfo)jobDetailList.get(0);
String dbCronExpression = jobInfo.getCronExpression();
return dbCronExpression;
}
public void excuteJobDetail(){
System.out.println("Ha, This is my job");
System.out.println("You are welcome!!!!!! The time is"+ new Date());
}报错位置:
// 运行时可通过动态注入的scheduler得到trigger
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", "aa");报错如下:
[lpmis] DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] SimpleJobFactory.newJob(46) | Producing instance of Job 'DEFAULT.schedulerJobDetail', class=org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$StatefulMethodInvokingJob
[lpmis] DEBUG [DefaultQuartzScheduler_Worker-8] JobRunShell.run(194) | Calling execute on job DEFAULT.schedulerJobDetail
[lpmis] WARN [DefaultQuartzScheduler_Worker-8] MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(168) | Could not invoke method 'reScheduleTestJob' on target object [com.huapu.lpmis.web.action.jobinfo.JobTest@109506a]
java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean
at com.huapu.lpmis.web.action.jobinfo.JobTest.reScheduleTestJob(JobTest.java:39)
at sun.reflect.GeneratedMethodAccessor80.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
[lpmis] INFO [DefaultQuartzScheduler_Worker-8] JobRunShell.run(200) | Job DEFAULT.schedulerJobDetail threw a JobExecutionException:
org.quartz.JobExecutionException: Could not invoke method 'reScheduleTestJob' on target object [com.huapu.lpmis.web.action.jobinfo.JobTest@109506a] [See nested exception: java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean]
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:174)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
java.lang.ClassCastException: org.springframework.scheduling.quartz.CronTriggerBean
at com.huapu.lpmis.web.action.jobinfo.JobTest.reScheduleTestJob(JobTest.java:39)
at sun.reflect.GeneratedMethodAccessor80.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)折腾了半天,没找到错误原因,请大家帮忙看看,谢啦!!!
解决方案 »
- hibernate的load问题
- Hibernate连接数据库问题
- struts2中启动tomcat时报java.lang.ClassNotFoundException异常?
- oracle 调用web service 的问题。
- CallableStatement中GetString的问题
- java结合openlayer,使用openlayer显示人员轨迹。
- 小弟在搞个留言版,需要分页显示,请教那位仁兄贴出你们认为较好的分页程序函数?分不多,最好的一定给分。
- 如何把jsp中的session变量传到javascript代码中?
- 为什么结果改变不了?
- 我添加到数据库表里的记录,汉字怎么都变成了乱码?谢谢
- servlet的生命周期和jsp的生命周期的一点迷惑?
- dwr和jquery的${id}用法有什么不同?
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", "aa"); =>
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
"jobTestTrigger", Scheduler.DEFAULT_GROUP);
"jobTestTrigger", Scheduler.DEFAULT_GROUP)报上面那个错,所以我临时改了个“aa”,实际上我没有特意设置group,请大家帮我研究研究,谢谢