零、引言
关于Spring集成Quartz有2种方法:
1. JobDetailBean.
2. MethodInvokeJobDetailFactoryBean.
以下从自身使用和理解以及掌握的知识对其进行阐述。
需要注意的是,在使用Spring集成Quartz的时候,一定不要忘记引入spring-support这个包:
org.springframework spring-context-support 4.2.6.RELEASE
它协助Spring集成了很多有用的第三方库,包括了邮件服务、定时任务、缓存等。。。
当然也不要忘记引入Quart的jar包:
org.quartz-scheduler quartz 2.2.3
一、JobDetailBean
1. 创建一个Job方法,此方法必须继承QuartzJobBean或者实现Job方法。
public class TestJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { System.out.println(TimeUtils.getCurrentTime()); }}
2. XML配置
二、MethodInvokeJobDetailFactoryBean
1. 创建一个Job类,此类不需要继承任何类或者实现任何接口:
package com.mc.bsframe.job;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.TriggerKey;import org.quartz.impl.triggers.SimpleTriggerImpl;import org.springframework.beans.factory.annotation.Autowired;import com.mc.bsframe.service.TestService;import com.mc.bsframe.util.TimeUtils;public class TestJob2 { public void doSomething() { System.err.println("****:" + TimeUtils.getCurrentTime()); }}
2. 配置XML
综上:定时任务的基本配置完成。
三、两种方法的说明
使用QuartzJobBean,需要继承。而使用MethodInvokeJobDetailFactoryBean则需要指定targetObject(任务实例)和targetMethod(实例中要执行的方法)
后者优点是无侵入,业务逻辑简单,一目了然,缺点是无法持久化(目前还不太清楚这点!)
从我使用的经验来说,我更推荐的第二种,其中一个很重要的原因就是因为定时任务中注入相关Service的时候,后者可以直接注入,而前者还需要进行Schedular的替换修改。