Spring Boot 整合 Quartz

简介:

配置

pom

Spring Boot 使用的是2.1.6.RELEASE,依赖中增加如下配置

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

application.properties

调度器可以和springboot公用数据源

#使用数据库固化调度信息
spring.quartz.job-store-type=jdbc
#调度器名称
spring.quartz.scheduler-name=MyScheduler
#不重新创建数据表
spring.quartz.jdbc.initialize-schema=never
#线程数量
spring.quartz.properties.org.quartz.threadPool.threadCount = 50
#持久化实现
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
#数据库方言StdJDBCDelegate 
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate 

java代码

任务:实现Job接口即可

public interface Job {
    //context中包含当前任务关联的信息 
    //JobExecutionException 当任务执行失败时可以通过配置来控制是否继续执行等操作
    void execute(JobExecutionContext context) throws JobExecutionException;
}

调度器:在service中注入Scheduler即可,Scheduler是调度器整体管理包括暂停任务,更新任务,恢复任务等

需求以及解决方法

每个任务使用相同上下文即JobData
继承Job的java类上增加@PersistJobDataAfterExecution,@DisallowConcurrentExecution注解,通常这两个注解配合使用

  • @PersistJobDataAfterExecution:在任务执行后固化JobData至数据库
  • @DisallowConcurrentExecution:避免同一个组的同一个任务并发执行以免JobData混乱

更新JobData至当前任务

   //jobDetail 任务信息
   JobDetail jobDetail = scheduler.getJobDetail(JobKey.jobKey(job.getName(), job.getGroup()));
   jobDetail.getJobDataMap().put("aaa", "bbb");
   CronTrigger trigger = (CronTrigger) scheduler.getTrigger(TriggerKey.triggerKey(job.getName(), job.getGroup()));
   Set<Trigger> triggers = new HashSet<>();
   triggers.add(trigger);
   //true 就是替换数据库中JobDataMap
   scheduler.scheduleJob(jobDetail,triggers,true);

任务控制

  • 暂停任务:scheduler.pauseJob(jobKey)
  • 恢复任务:scheduler.resumeJob(jobKey)
  • 立即执行任务:scheduler.triggerJob(jobKey)
  • 执行中的任务:
List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs()
//获取具体任务信息
JobDetail jobDetail = executingJob.getJobDetail();
  • 查询任务
   //依据分组查询,如需其他查找查看api中实现了org.quartz.Matcher接口的类即可
   GroupMatcher<JobKey> matcher = GroupMatcher.groupContains(groupKeyword);
   Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
   //通过JobKey获取调度器中具体任务以及相关信息 
   scheduler.getJobDetail(jobKey); 

参考资料

https://eelve.com/archives/springbootstarterquartzs

http://www.quartz-scheduler.org/

https://www.w3cschool.cn/quartz_doc/

目录
相关文章
|
2月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
62 0
|
1月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
28 2
|
1月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
30 2
|
29天前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
55 1
|
1月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
26 1
|
29天前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
24 0
|
29天前
|
SQL API 调度
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
31 0
|
1月前
|
Java API 调度
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
26 0
|
1月前
|
缓存 运维 Java
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
22 0
|
2月前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
62 6