简介
Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
Job 工作任务 ,你要做什么
Trigger 执行工作任务 触发条件 , 什么时间执行, 多久执行一次 编写工作任务
对象 TriggerBuilder 启动任务时间
startNow 立即启动
startAt (Date) 指定时间启动
对象 SimpleScheduleBuilder 进行简单任务重复执行
repeatSecondly …() 多少秒后重复执行
repeatminutely …() 多少分钟后重复执行
repeatHourly …() 多少小时后重复执行
Quartz 和 Spring 集成使用
Spring 提供 JobDetailFactoryBean
Spring 提供 TriggerFactoryBean
Spring 提供 SchedulerFactoryBean
1、 建立 war 包 maven 项目 quartz_spring ,导入 maven 依赖
2、 配置 web.xml spring 的监听器
3、 编写 Job 程序
public class HelloQuartz implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("定时器执行中~~~~");
}
}
4、配置 spring 的 applicationContext.xml
<bean id="promotionJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="cn.itcast.bos.quartz.PromotionJob" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="promotionJob" />
<property name="startDelay" value="0" />
<property name="repeatInterval" value="60000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory" />
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean>
Quartz 和 Spring 集成后 Bean 注入
代码
public class HelloJob implements Job {
@Autowired
private HelloService helloService;
public void execute(JobExecutionContext context) throws JobExecutionException {
helloService.sayHello();
}
}
@Service("jobFactory")
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// 调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
// 进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
application.xml
<context:component-scan base-package="cn.itcast" />
<bean id="helloJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="cn.itcast.quartz.spring.HelloJob"/>
</bean>
<!-- ======================== 调度触发器 ======================== -->
<bean id="simipleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="helloJob"></property>
<property name="startDelay" value="3000"></property>
<property name="repeatInterval" value="5000"></property>
</bean>
<!-- ======================== 调度工厂 ======================== -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory" />
<property name="triggers">
<list>
<ref bean="simipleTrigger" />
</list>
</property>
</bean>