摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入

Spring有自己的Schedule定时任务,在Spring boot中使用的时候,不能动态管理JOB,于是就使用Quartz来实现。

在Spring Boot中配置Quartz:

import java.io.IOException;
import java.util.Properties;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;@Configuration
@EnableScheduling
public class QuartzSchedule {@Autowiredprivate MyJobFactory myJobFactory;@Beanpublic SchedulerFactoryBean schedulerFactoryBean() throws IOException {SchedulerFactoryBean factory = new SchedulerFactoryBean();factory.setOverwriteExistingJobs(true);// 延时启动factory.setStartupDelay(20);// 加载quartz数据源配置
        factory.setQuartzProperties(quartzProperties());// 自定义Job Factory,用于Spring注入
        factory.setJobFactory(myJobFactory);return factory;}/*** 加载quartz数据源配置* * @return* @throws IOException*/@Beanpublic Properties quartzProperties() throws IOException {PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));propertiesFactoryBean.afterPropertiesSet();return propertiesFactoryBean.getObject();}}

为了在JOB中使用Spring管理的Bean,需要重新定义一个Job Factory:

@Component
public class MyJobFactory extends AdaptableJobFactory {@Autowiredprivate AutowireCapableBeanFactory capableBeanFactory;@Overrideprotected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {// 调用父类的方法Object jobInstance = super.createJobInstance(bundle);// 进行注入
        capableBeanFactory.autowireBean(jobInstance);return jobInstance;}
}

然后在JOB中就可以使用Spring管理的Bean了

public class MyJob implements Job, Serializable {private static final long serialVersionUID = 1L;private Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate SomeService someService;@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {someService.doSomething();}
}

下面代码是创建JOB:

JobDetail jobDetail = JobBuilder.newJob(((Job) Class.forName(job.getClazz()).newInstance()).getClass()).withIdentity(job.getJobName(), job.getJobGroup()).build();jobDetail.getJobDataMap().put("extdata", job.getExtData());// 表达式调度构建器CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()).withMisfireHandlingInstructionDoNothing();// 构建一个triggerTriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(scheduleBuilder);if (job.getStartTime() != null) {triggerBuilder.startAt(job.getStartTime());}if (job.getEndTime() != null) {triggerBuilder.endAt(job.getEndTime());}CronTrigger trigger = triggerBuilder.build();scheduler.scheduleJob(jobDetail, trigger);// 注入到管理类

https://my.oschina.net/hhaijun/blog/698498

转载于:https://www.cnblogs.com/wlsblog/p/8046931.html

Spring Boot集成Quartz注入Spring管理的类相关推荐

  1. Spring Boot集成Quartz动态实现数据库任务

    1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...

  2. mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务

    什么是quartz? Quartz是一个完全由 Java 编写的开源任务调度框架. 我们经常会遇到一些问题: 想每个月27号,提醒信用卡还款: 想每隔1小时,提醒一下,累了,站起来活动一下: 想每个月 ...

  3. spring boot集成Quartz实现定时任务

    简介 Quartz是一款功能强大的任务调度器,Quartz有两个比较核心的组件:Job 和 Trigger. Quartz的三个基本要素 Scheduler:调度器,所有的调度都是由它来控制. Tri ...

  4. Spring Boot 集成 Quartz

    1.美图 2.概述 在项⽬开发中,经常需要定时任务来帮助我们来做一些内容,⽐如定时派息.跑批对账.业务监控等.Spring Boot 体系中现在有两种⽅案可以选择,第⼀种是 Spring Boot 内 ...

  5. Spring Boot 集成Quartz

    1:在项目的pom文件添加quartz依赖 <!-- quartz定时任务 --> <dependency><groupId>org.springframework ...

  6. spring boot集成quartz scheduler

    工具.版本 开发工具:IntelliJ IDEA JDK:1.8 spring-boot:2.5.6(事例使用,可根据自己版本调整) maven:3.6.3 依赖jar <dependency& ...

  7. Spring Boot 集成 批处理框架Spring batch

    Spring Batch是一个轻量级的框架,完全面向Spring的批处理框架,用于企业级大量的数据读写处理系统.以POJO和Spring 框架为基础,包括日志记录/跟踪,事务管理. 作业处理统计工作重 ...

  8. 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题

    为什么80%的码农都做不了架构师?>>>    如题,最近使用spring boot集成shiro,在shiroFilter要使用数据库动态给URL赋权限的时候,发现 @Autowi ...

  9. Spring Boot 集成 Druid 监控数据源

    关注"Java后端技术全栈" 回复"面试"获取全套大厂面试资料 Druid 介绍 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 ...

最新文章

  1. 【Qt】Qt再学习(一):Application Example
  2. 【ES6】JS的Set和Map数据结构
  3. javascript基础语法——变量和标识符
  4. Difference Between HashMap and IdentityHashMap--转
  5. 模型验证的常用“武器”—ROC和AUC peiyang
  6. 图解git原理与日常实用指南
  7. 到底什么是云计算-转自http://blog.csdn.net/adwu73
  8. Visual Studio 2008在设计视图和代码视图切换的快捷键F7
  9. 【FZU - 1759】Super A^B mod C (数论,快速幂,快速乘,欧拉降幂,指数循环节,模板)
  10. React中的组件通信——父传子、子传父、Context
  11. vscode代码运行时间工具_代码编辑器横评:为什么 VS Code 能拔得头筹
  12. fcpx插件:21个模拟相机取景器数码屏显效果预设Camera Rec
  13. java swing removeall_java中JFrame中函数removeAll的用法 | 学步园
  14. Python并发编程理论篇
  15. 关于Meta标签中format-detection属性及含义
  16. java暂停脚本_用Rhino解析Java中的JavaScript:暂停/恢复脚本
  17. WinHex V14.6 SR-2 注册码
  18. 网上书城项目-LoadRunner压力测试
  19. Mac版Charles免费安装及使用
  20. 文本数据挖掘----初识数据挖掘

热门文章

  1. centos 禁用root登录
  2. 介绍一款比Android原生模拟器还要快的模拟器Genymotion(转)
  3. redis服务端基本命令
  4. java写文件方法之比较
  5. 数据库中的数据类型和c#的数据类型的映射表[转]
  6. 当前流行的J2EE WEB应用架构分析
  7. ElasticSearch基础杂烩-配置-索引-优化
  8. (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
  9. iOS transform解决连续多次旋转缩放,实现图片旋转缩放效果
  10. Class类文件结构、类加载机制以及字节码执行