首页 > 代码库 > quartz任务调度配置 解决jobDetail身份标识存在问题

quartz任务调度配置 解决jobDetail身份标识存在问题

applicationContext.xml配置:每五秒轮询一次。注意:周和日期不能同时为通配符”*“

1  <bean id="planInfoServiceImpl" class="com.xxx.xxx"></bean>2     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">3         <property name="targetObject" ref="planInfoServiceImpl"></property>4         <property name="targetMethod" value="http://www.mamicode.com/backup"></property> 5     </bean>6     <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">7         <property name="jobDetail" ref="jobDetail"></property>8         <property name="cronExpression" value="http://www.mamicode.com/*/5 * * * * ? *"></property>9     </bean>

业务逻辑从spring容器中拿到任务和触发器:

1 @Autowired2     private JobDetail jobDetail;3     @Autowired4     private CronTrigger trigger;

业务逻辑创建管理:使用此方法不会采用shutdown销毁Scheduler,因为销毁Scheduler后再次加载jobDetail时会报身份标识存在的异常,索性任务调度使用完毕后使用pauseAll()暂停任务调度,需要时恢复调度,按需修改触发周期。

 1 SchedulerFactory ss = new StdSchedulerFactory(); 2         try { 3             if(sched==null){//第一次使用加载任务和触发器 4                 sched = ss.getScheduler(); 5                 sched.scheduleJob(jobDetail, trigger); 6             }else{//非第一次触发,恢复任务调度 7                 try { 8                     trigger.setCronExpression("*/5 * * * * ? *"); 9                 } catch (ParseException e) {10                     e.printStackTrace();11                 }12                 sched.resumeAll();13             }        14             if(!sched.isShutdown()){15 16                 sched.start();17             }18         } catch (SchedulerException e) {19             e.printStackTrace();20         }

 

quartz任务调度配置 解决jobDetail身份标识存在问题