这篇文章将介绍如何在Spring Boot 中使用Quartz。
一、首先在 pom.xml 中添加 Quartz 依赖。
<!-- quartz依赖 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <!-- 该依赖必加,里面有spring对schedule的支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>
二、编写任务类,里面编写希望得到定时执行的具体任务。注意在任务类上需要添加 @Component 注解,方便Spring 扫描到该组件并注解到Spring 容器中。
/** * 定时任务 * @author lWX515915 * */ @Component public class MyTask{ public void task1() { System.out.println("this is task1 time: " + new Date()); } }
三、然后编写配置类 QuartzConfig ,该类中使用Java代码详细描述了如何配置Quartz。类前添加@Configuration注解 表示这是配置类
@Configuration 表示这个类会声明一个或者多个 Bean 类 并且有可能会被Spring 容器处理来生成bean的定义和bean对应的服务请求。
在configuration类中,我们需要对三个对象JobDetail、Trigger 和 Scheduler 进行配置。
/** * Quartz配置类 * @author lWX515915 * */ @Configuration public class QuartzConfig { ... }
1、配置JobDetail
@Bean表示该方法返回一个bean,并交付Spring容器管理 。
参数是任务,setTargetObject 是设置具体的执行目标,setTargetMethod 是设置具体的执行方法。
MethodInvokingJobDetailFactoryBean 是JobDetail 的 bean 工厂。
/** * 配置JobDetail * @param scheduledTask 需要被执行的任务 * @return */ @Bean(name="jobDetail") public MethodInvokingJobDetailFactoryBean detailFactoryBean(MyTask task) { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); jobDetail.setConcurrent(false);//设置多任务是否采用并发模式 jobDetail.setName("job1"); jobDetail.setGroup("group1"); jobDetail.setTargetObject(task); //设置具体执行目标 jobDetail.setTargetMethod("task1"); //设置具体执行方法 return jobDetail; }
2、配置 Trigger
其中参数表示JobDetail,这里就是我们之前注册到Spring 容器中的JobDetail bean。
setJobDetail 设置具体的任务。
setCronExpression 设置cron 表达式。
返回值是CronTriggerFactoryBean,是一个CronTrigger对应的bean factory。
/** * 配置trigger * @param jobDetail * @return */ @Bean(name="jobTrigger") public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) { CronTriggerFactoryBean jobTrigger = new CronTriggerFactoryBean(); jobTrigger.setJobDetail(jobDetail.getObject()); jobTrigger.setCronExpression("0/10 * * ? * *"); jobTrigger.setName("jobTrigger"); return jobTrigger; }
3、配置Scheduler
其中setOverwriteExistingJobs 设置是否更新已经存在的job
setTriggers 设置trigger
返回scheduler 对应的bean工厂
/** * 配置调度器 * @param trigger * @return */ @Bean(name="jobSchedule") public SchedulerFactoryBean schedulerFactory(CronTriggerFactoryBean trigger) { SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); schedulerFactory.setOverwriteExistingJobs(true);//设置更新已经存在的job schedulerFactory.setTriggers(trigger.getObject()); return schedulerFactory; }
经过上面三个步骤,Quartz 的配置类就已经完成了
四、启动应用 查看结果,下面是运行的结果。可以看到实现了我们想要的结果。
综上,Spring Boot 中使用 Quartz 的关键在与 Quartz 的配置。