quartz 通过数据库配置cronExpression

来源:互联网 发布:网络语拉仇恨什么意思 编辑:程序博客网 时间:2024/06/05 12:44
<!-- 将定时设置中的数据根据开始时间转移到执行的队列中   (实例) --><bean id="addExecuteTask" class="com.zd.jobs.AddExecuteTask"/>  <!-- 定时获取天气预报信息  (实例) --><bean id="getWeatherTask" class="com.zd.jobs.GetWeatherTask"/>  <bean lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  <property name="triggers">  <list>  <ref bean="addExecuteTaskTrigger" /> <!--      <ref bean="readWeaterDataTrigger" />   --></list>  </property>  </bean>  <!-- 设置定时器运行时间 -->  <bean id="addExecuteTaskTrigger" class="<strong>com.zd.comm.quartz.InitializingCronTrigger</strong>">         <property name="jobDetail" ref="addExecuteTaskDetail"/>         <property name="cronExpression" value="* */2 * * * ?"/> </bean>  <bean id="readWeaterDataTrigger" class="com.zd.comm.quartz.InitializingCronTrigger">         <property name="jobDetail" ref="readWeaterDataDetail"/>         <property name="cronExpression" value="* */1 * * * ?"/> </bean>  <!-- 定时器执行方法 -->  <bean id="addExecuteTaskDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">           <property name="targetObject" ref="addExecuteTask"/>          <property name="targetMethod" value="transferTask"/>          <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->          <property name="concurrent" value="false"/></bean>    <bean id="readWeaterDataDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">           <property name="targetObject" ref="getWeatherTask"/>          <property name="targetMethod" value="rquestWeatherByCityName"/>          <property name="concurrent" value="false"/></bean>    


最重要的就是 com.zd.comm.quartz.InitializingCronTrigger ,继承 CronTriggerBean ,

并在 public void setCronExpression(String cronExpression) 方法中,设置新的cronExpression;

@Servicepublic class InitializingCronTrigger extends CronTriggerBean implements Serializable { private static final Log log = LogFactory.getLog(InitializingCronTrigger.class);/** *  */private static final long serialVersionUID = 1L;@Inject private SysParameterService sysParameterService;public void setCronExpression(String cronExpression) {String new_cronExpression = sysParameterService.getSysParameterByTypeAndKey("quartz", "quartz_weather");log.info("cronExpression:" + cronExpression);if(!new_cronExpression.equalsIgnoreCase(cronExpression)){try {super.setCronExpression(new_cronExpression);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }}  }



0 0
原创粉丝点击