基于Spring实现定时调度

比较常用的是,Spring对Quartz的支持,可以非常容易地进行定时任务的调度。一般,具有两种方式实现定时调度:

一种是通过继承Spring的org.springframework.scheduling.quartz.QuartzJobBean来定义定时任务,这种情况下与Spring代码有一定耦合。下面,通过例子来说明:

实现一个定时任务类,代码如下所示:

上面的JobExecutionContext context是一个任务执行上下文,可以通过配置,将需要的数据传递给executeInternal方法,然后在该方法中定义任务的处理逻辑。

这里,假设有一个类包含了对定时任务的控制信息,实现类为JobControlInfo,形式化定义如下所示:

通过Spring配置传递给JobExecutionContext context。

Spring配置文件quartz.xml的内容,如下所示:

下面可以启动定时任务了,代码如下所示:

我们定义这个定时任务,执行时间间隔为2s。

 

另一种是完全与Spring代码解耦合,而只是通过Spring配置就能进行定时任务的配置,一个定时任务可以是任意的Java处理类。而对于定时的配置,是基于Unix系统的crontab命令来实现的,更加灵活地配置定时任务。

下面说明实现方法:

定义一个普通的Java类,里面的一个方法里面包含了定时任务的处理逻辑,如下所示:

然后看下Spring配置文件quartz.xml内容:

通过Spring的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean来设置目标定时任务处理内容,如处理类和处理方法,通过org.springframework.scheduling.quartz.CronTriggerBean的cronExpression属性来配置定时任务,非常灵活。

上述配置,定时任务会自动调用MyQuartzJob类的scan方法来执行任务。

对于cronExpression属性的值,包括以下7 个字段:

有关各个字段可以设置的值,我们引用http://www.ibm.com/developerworks/cn/java/j-quartz/index.html的内容:

更多信息可以查阅相关资料。

启动定时任务,测试代码如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值