您现在的位置是:首页 > 文章详情

Spring Boot 整合 Quartz

日期:2019-12-10点击:644

配置

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/

原文链接:https://yq.aliyun.com/articles/738968
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章