`

spring之定时调度

阅读更多
在java2中完成定时调度是基于Timer(启动定时器)和TimerTask(定义执行任务)来完成的。
但是功能比较局限。spring支持Quartz。
首先看一下非spring情况下使用Quartz的实例
首先定义一个实现StatefulJob接口的类,该类表示定时器的执行的任务。
public class WeatherCaptureJob implements StatefulJob {
       public void execute(JobExecutionContext context)
throws JobExecutionException {
           //xxx调度逻辑代码
   } 

然后实现一个JobDetail用于装作jobClass(即上面的类).
JobDetail jobDetail = new JobDetail("WeatherCaptureJob",
"WeatherCaptureJobGroup", WeatherCaptureJob.class);
然后定义一个表达式语言的类
CronExpression cexp = new CronExpression(expressValue);//expressValue为表达式语言字符串
再定义一个CronTrigger类,该类用于装作表达式语言,即设定了定时器的执行时机。
CronTrigger cronTrigger = new CronTrigger( "WeatherCaptureCronTrigger", "WeatherCaptureJobGroup");
cronTrigger.setCronExpression(cexp);
最后定义一个调度类,该类用于让任务类在设定的时间执行
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();

然后再看看spring下对Quartz的支持
首先定义一个继承QuartzJobBean类的实现类,该实现类是定时任务类
public class MyTimeTask extends QuartzJobBean {
   public void executeInternal(JobExecutionContext arg0)
throws JobExecutionException  {
      //定时逻辑代码
   }

在spring配置文件中定义jobdetail类,该类是装载定时任务类的
<bean id="mySchdulTask"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>
MyTimeTask
</value>
</property>
</bean>
接着定义一个Triger类,该类和上面有一点区别之处就是不但定义了时间表达式,而且还定义装作了jobdetail类
<bean id="myTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mySchdulTask" />
</property>
<property name="cronExpression">
<value>0 0/10 * * * ?</value>
</property>
</bean>
最后定义一个调度类,用于执行triger
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
                           <ref bean="myTrigger" />
</list>
</property>
</bean>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics