天天看点

java任务调度quartz原理,springboot2.x 整合quartz,实现任务的调度

在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实现各种任务的动态管理功能