在项目开发中经常会使用到定时器的功能,比如定时生成报告、发送邮件、定时处理账务等等.项目中Quartz集成spring的方式是最为常用的,即QuartzJobBean的使用.
涉及关键类有三个:
1、调度工作类:org.springframework.scheduling.quartz.JobDetailFactoryBean,该对象通过jobClass属性指定调度工作类(做什么);
2、调度触发器:org.springframework.scheduling.quartz.CronTriggerFactoryBean,该对象通过jobDetail属性指定工作类,通过
cronExpression属性指定调度具体的时间及频率(什么时候做);
3、调度工厂类:org.springframework.scheduling.quartz.SchedulerFactoryBean,该对象通过triggers属性指定单个或多个触发器(调度安排)。
实例:
1.定义工作类,集成QuartzJobBean
public class MyJob extends QuartzJobBean {
private static int i = 0;
//JobDetailBean通过jobDataAsMap注入此属性值,指定当服务器启动后过多少秒钟首次调用工作类
//需要调度的任务
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println("QuartzJobBean-调度" + ++i + "进行中...");
}
}
2.配置文件applicationContext.xml(也可以单独写一个配置文件,专门写quartz的配置,和其它分开.如:applicationContext-quartz.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- JobDetailFactoryBean1、工作类配置 -->
<bean name="myjob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.test.job.MyJob" />
</bean>
<!-- CronTriggerFactoryBean 2、触发器配置-->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFatoryBean">
<!-- 注入1步骤中的工作类 -->
<property name="jobDetail" ref="myJob" />
<!-- 每隔5秒调度一次 -->
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
<!-- SchedulerFactoryBean 3、配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" /><!-- 注入2中触发器-->
</list>
</property>
</bean>
</beans>
3.简单测试
public class ScheduleTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 加载配置文件.
}
}
4.小结
在使用Quartz的时候,关键就是工作类的定义和配置文件几个关键类的引用关系.