在springboot2.x中已经集成了quartz的starter,我们只需
1、在pom文件中引入
org.springframework.boot
spring-boot-starter-quartz
2、创建application-quartz.yml文件
文件名以application为前缀,是为了在主配置文件(application.yml)中引入方便
spring:
quartz:
#相关属性配置
properties:
org:
quartz:
scheduler:
instanceName: clusteredScheduler
instanceId: AUTO
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: true
clusterCheckinInterval: 10000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
#数据库方式
job-store-type: jdbc
# 初始化表结构
# jdbc:
# initialize-schema: never
3、在主配置文件中引入quartz配置
spring:
profiles:
include: quartz
4、创建一个任务控制工具类,用来操作任务
由于在springboot 2.x中,已经默认支持了quartz,提供了调度器工厂(SchedulerFactory)和调度器的bean的定义,并通过以上文件配置完成,所以我们这里直接注入scheduler就可以实现相应的功能。(具体操作略,搜索一下有好多)
@Component
public class QuartzManager {
@Resource
private Scheduler schedule;
...
}
5、创建任务类实现Job接口或者继承QuartzJobBean类。
此类中就可以注入对应的Service实现具体业务。
6、如果想手动初始化任务,可以创建TaskRunner并实现ApplicationRunner接口,实现run方法来组织定时任务。
@Override
public void run(ApplicationArguments args) throws Exception {
LOGGER.info("初始化任务");
String jobName = "abcJob";
String jobGroup = "DEFAULT";
String description = "负责清理超时的";
String jobClassName = "com.xxx.AbcJob";
String cronExpression = "0 0 0 * * ? *";
quartzManager.addOrUpdateJob(AbcJob.class, jobName, jobGroup, cronExpression);
}
7、可以使用QuartzManager实现各种任务的动态管理功能