Quartz定时任务调用以及与Spring的整合

Quartz就像一个定时器,经常用于处理一些需要定时重复执行的业务。它有3个主要概念:调度器,触发器和任务。先下载quartz.jar文件或使用Maven:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.0</version>
</dependency>
新建一个Java项目,将下载好的quartz.jar导入。首先我们建立一个简单的任务,任务的接口是Job类。

Java Code:
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SimpleQuartzJob implements Job {

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("In SimpleQuartzJob - executing its JOB at "
+ new Date() + " by " + context.getTrigger().getName());
}

}
1.去实现Quartz的Job接口,在execute方法中写你要执行的业务逻辑。
2.创建触发器和调度器来执行定时任务。

Java Code:
import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

public class Main {

public static void main(String[] args) throws SchedulerException {
//get a scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//new a job
JobDetail jobDetail = new JobDetail("jobDetail-s1","jobDetailGroup-s1", SimpleQuartzJob.class);
//new a trigger
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
//set the start time
long ctime = System.currentTimeMillis();
simpleTrigger.setStartTime(new Date(ctime));
//set the interval
simpleTrigger.setRepeatInterval(10000);
//set the count
simpleTrigger.setRepeatCount(10);
//set the priority, default is 5
simpleTrigger.setPriority(5);
scheduler.scheduleJob(jobDetail, simpleTrigger);

scheduler.start();
}

}
在该类中,先初始化一个SchedulerFactory类的对象,再由它得到一个Scheduler对象。接着再分别创建一个Job和Trigger。注意在创建Job的过程中需要用到之前定义的SimpleQuartzJob,已告知JobDetail具体需要执行的逻辑代码是SimpleQuartzJob中的execute方法。然后可以定义些执行参数,如:startTime开始时间,repeatInterval重复执行间隔,repeatCount重复执行次数及优先级Priority等。最后将job和trigger通过scheduleJob交给scheduler来执行即可。

如何在Spring环境中集成Quartz?
首先确保你的Spring环境中已经有Spring-context-support.jar这个jar文件。这个jar中包含了Spring对于quartz的支持。
接着就能在Spring的配置文件中建立如下配置:
<bean id="configRefreshJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="configUtil" />
</property>
<property name="targetMethod">
<value>refreshConfig</value>
</property>
</bean>

<bean id="configRefreshJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="configRefreshJobDetail" />
</property>
<property name="cronExpression">
<value>5 * * * * ?</value>
</property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="configRefreshJobTrigger" />
</list>
</property>
</bean>
其中MethodInvokingJobDetailFactory这个对象其实就类似于Job。targetObject指向的是BeanFactory中的某一对象比如说是configUtil,而targetMethod指明了要重复执行的方法,是configUtil对象中的refreshConfig方法。这样一个Job就定义好了,这里能访问Spring工厂中已有的bean最为Job的对象,而且也不用我们手动去创建Job,已传统的Spring配置文件的方式来定义个Job的bean。CronTriggerBean其实就等同于之前的Trigger,这里Spring为我们做了封装,通过jobDetail可以指定任务对象,就是之前的configRefreshJobDetail, cronExpression表达式可以指定循环时间,这比之前指定repeatInterval的方式要灵活得多了。最后将configRefreshJobTrigger对象交给SchedulerFactoryBean对象即可。我们不需要手动去调用,只要存在SchedulerFactoryBean对象,spring容器会自动为我们启动其内部的Trigger。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值