Quartz任务调度框架整合Spring开发

Quartz任务调度框架的使用.

1.描述
Quartz是一个完全由java编写的开源作业调度框架.
简单来说: 就是启动定时任务的框架.
2.案例1
@Test
public void quartzTest(){
    // 定时器对象
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    // 开启定时任务
    scheduler.start();
    // 关闭定时任务
    scheduler.shutdown();
}
3.必须掌握两个对象 JobDetail和Trigger
// Job 工作任务, 你要做什么;
// Trigger 执行工作任务触发的条件;
4.案例二 simpleTrigger
//创建一个类实现job接口
public class helloJob implements Job(){
    // 实现excute方法
    public void execute(JobExecutionContext context) throws JobExecutionException{
        System.out.println("Hello, Quartz !!!");
    }
}

//每个五秒实现控制台打印一次 Hello, Quartz !!!
@Test
public void quartzTest(){
    //1. 定时器对象
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    //1.1 定义一个定时对象
    JobDetail job = JobBuilder.newJob(HelloJob.class).withIndentity("job1","group1").build;
    //1.2 定义触发器
    Trigger trigger = TriggerBuilder.newTrigger().withIdentity("tigger1","group1").startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5)).build();
    scheduler.scheduleJob(job, trigger);
    //2. 开启定时任务
    scheduler.start();
}
5.案例三: CronTrigger的使用
@Test
public void quartzTest(){
    //1. 定时器对象
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    //1.1 定义一个定时对象
    JobDetail job = JobBuilder.newJob(HelloJob.class).withIndentity("job1","group1").build;
    //1.2 定义触发器
    Trigger trigger = TriggerBuilder.newTrigger()
      .withIdentity("tigger1","group1")
      .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 ? * *"))
      .build();
    scheduler.scheduleJob(job, trigger);
    //2. 开启定时任务
    scheduler.start();
}
注: 触发器表达式可以借助生成器生成: CronExpBuilder-1.0(触发器表达式生成器).jar
6.Spring整合Quartz
//JobFactory
@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;
    }
}
//PromotionJob
public class PromotionJob implements Job {
    @Autowired
    private PromotionService promotionService;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("活动过期处理程序执行....");
        // 每分钟执行一次,当前时间 大于 promotion数据表 endDate, 活动已经过期,设置status='2'
        promotionService.updateStatus(new Date());
    }
}
<!--Spring整合 quartz-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <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="2000" />
    </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory" ref="jobFactory" />
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>
</beans>

猜你喜欢

转载自blog.csdn.net/Orangesss_/article/details/82141930