quartz 配置 动态定时任务

来源:互联网 发布:云购源码 乐清一元杀 编辑:程序博客网 时间:2024/05/08 23:21

Spring3.2  + quartz 1.7 先上配置文件

 <bean id="cal" class="neusoft.tis.handle.SunTimesHandle" />
 <bean id="on" class="neusoft.tis.handle.RunwayLampOnHandle" />
 <bean id="off" class="neusoft.tis.handle.RunwayLampOffHandle" />
 
 <bean id="calJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="cal"></property>
  <property name="targetMethod" value="calTime"></property>
  <property name="concurrent" value="false"></property>
 </bean>

 <bean id="onJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="on"></property>
  <property name="targetMethod" value="onExecute"></property>
  <property name="concurrent" value="false"></property>
 </bean>
 
 <bean id="offJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="off"></property>
  <property name="targetMethod" value="offExecute"></property>
  <property name="concurrent" value="false"></property>
 </bean>  
  
 <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <bean id="calcronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="calJobDetail" />
     <property name="cronExpression">
      <!-- 默认0:00执行 --> 
      <value>0 0 1 * * ?</value>
     </property>
    </bean>
    <bean id="oncronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="onJobDetail" />
     <property name="cronExpression">
      <!-- 默认5:30执行 --> 
      <value>0 30 5 * * ?</value>
     </property>
    </bean>
    <bean id="offcronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="offJobDetail" />
     <property name="cronExpression">
      <!-- 默认18:00执行 --> 
      <value>0 0 18 * * ?</value>
     </property>
    </bean>        
   </list>   
  </property>
  <property name="autoStartup" value="true"/>                        
 </bean>
 
 <bean id="scheduleConfigManager" class="neusoft.tis.quartz.ScheduleConfigManager">
  <property name="scheduler" ref="schedulerFactory" /> 
 </bean>
  

负责设置的类 

public class ScheduleConfigManager {
 private static Logger log = Logger.getLogger(ScheduleConfigManager.class);

 private Scheduler scheduler;
 
 // 设值注入,通过setter方法传入被调用者的实例scheduler
 public void setScheduler(Scheduler scheduler) {
  this.scheduler = scheduler;
 }
 
 /**
  * @return
  */
 public Scheduler getScheduler() {
  return scheduler;
 }
 /**
  * 重新设置表达式
  *
  * @param newExpression
  * @throws SchedulerException
  * @throws ParseException
  */
 public void reScheduleJob(String newExpression, String cronTrigger) throws SchedulerException,ParseException {
  log.info("[newExpression="+ newExpression + ": cronTrigger=" +cronTrigger +"]");
  try {
   CronTriggerBean trigger = (CronTriggerBean)scheduler.getTrigger(cronTrigger,Scheduler.DEFAULT_GROUP);   
   String originConExpression = trigger.getCronExpression();
   if (!originConExpression.equalsIgnoreCase(newExpression)) {
    trigger.setCronExpression(newExpression);
    scheduler.rescheduleJob(cronTrigger, Scheduler.DEFAULT_GROUP, trigger);
   }
  } catch (java.text.ParseException e) {
   e.printStackTrace();
  }
 }

另一个累一面动态算出的时间

   log.info("[日落开灯定时任务时间表达式:"+ time2.toString()+"]");
   manager.reScheduleJob(time2.toString(),"oncronTrigger");
   log.info("[日出关灯定时任务时间表达式:"+ time1.toString()+"]");
   manager.reScheduleJob(time1.toString(),"offcronTrigger");

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Spring 3.2 + quartz 2.1.6 配置文件

 <bean id="cal" class="neusoft.tis.handle.SunTimesHandle" />
 <bean id="on" class="neusoft.tis.handle.RunwayLampOnHandle" />
 <bean id="off" class="neusoft.tis.handle.RunwayLampOffHandle" />
 
 <bean id="calJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="cal"></property>
  <property name="targetMethod" value="calTime"></property>
  <property name="concurrent" value="false"></property>
 </bean>

 <bean id="onJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="on"></property>
  <property name="targetMethod" value="onExecute"></property>
  <property name="concurrent" value="false"></property>
 </bean>
 
 <bean id="offJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="off"></property>
  <property name="targetMethod" value="offExecute"></property>
  <property name="concurrent" value="false"></property>
 </bean>  
  
 <bean id="scheduler"  lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <bean id="calcronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean ">
     <property name="jobDetail" ref="calJobDetail" />
     <property name="cronExpression">
      <!-- 默认0:00执行 --> 
      <value>0 41 15 * * ?</value>
     </property>
    </bean>
    <bean id="oncronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean ">
     <property name="jobDetail" ref="onJobDetail" />
     <property name="cronExpression">
      <!-- 默认5:30执行 --> 
      <value>0 30 5 * * ?</value>
     </property>
    </bean>
    <bean id="offcronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean ">
     <property name="jobDetail" ref="offJobDetail" />
     <property name="cronExpression">
      <!-- 默认18:00执行 --> 
      <value>0 0 18 * * ?</value>
     </property>
    </bean>        
   </list>   
  </property>
  <property name="autoStartup" value="true"/>                        
 </bean>
 
 <bean id="scheduleConfigManager" class="neusoft.tis.quartz.ScheduleConfigManager">
  <property name="scheduler" ref="scheduler" /> 
 </bean>

主类

 private StdScheduler scheduler;
 
 // 设值注入,通过setter方法传入被调用者的实例scheduler
 public void setScheduler(StdScheduler  scheduler) {
  this.scheduler = scheduler;
 }
 
 /**
  * @return
  */
 public StdScheduler  getScheduler() {
  return scheduler;
 }
 /**
  * 重新设置表达式
  *
  * @param newExpression
  * @throws SchedulerException
  * @throws ParseException
  */
 public void reScheduleJob(String newExpression, String cronTrigger) throws SchedulerException,ParseException {
  log.info("[newExpression="+ newExpression + ": cronTrigger=" +cronTrigger +"]");
  TriggerKey triggerKey = TriggerKey.triggerKey(cronTrigger,Scheduler.DEFAULT_GROUP);
  //获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
  CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
  //表达式调度构建器
  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(newExpression);
  //按新的cronExpression表达式重新构建trigger
  trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
  //按新的trigger重新设置job执行
  scheduler.rescheduleJob(triggerKey, trigger);
 }

 

 

 

0 0
原创粉丝点击