SpringBoot + Quartz 集成
Quartz
应用启动加载集群配置
@Bean
注解交由Spring BeanFactory
容器管理@Bean
public JobDetailFactoryBean testJobDetailFactory() {
JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
jobDetailFactory.setName("test-job");
jobDetailFactory.setGroup("sns");
jobDetailFactory.setJobClass(TestJob.class);
jobDetailFactory.setDurability(true);
return jobDetailFactory;
} @Bean
public CronTriggerFactoryBean testJobTrigger(
@Qualifier("testJobDetailFactory") JobDetailFactoryBean factory) {
CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
if (factory.getObject() != null) {
tigger.setJobDetail(factory.getObject());
}
tigger.setCronExpression("0/10 * * * * ?");
tigger.setName("test-job-trigger");
return tigger;
}/**
* SchedulerFactoryBean 实现 InitializingBean,
* description: quartz定时任务配置
*/
@Configuration
public class QuartzConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(QuartzConfig.class);
private static final String RESOURCE_NAME = "quartz.properties"; @Resource
private DataSource dataSource;
@Autowired
private SpringJobFactory springJobFactory; @Bean
public SchedulerFactoryBean schedulerFactory(Trigger... triggers) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
Properties p = new Properties();
try {
p.load(this.getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME));
} catch (IOException e) {
LOGGER.error("quartz定时任务加载{}过程中发生错误。");
throw new Error(e);
}
factory.setQuartzProperties(p);
factory.setDataSource(dataSource);
factory.setOverwriteExistingJobs(true);
factory.setStartupDelay(20);
factory.setTriggers(triggers);
factory.setJobFactory(springJobFactory);
return factory;
}
}实现
org.springframework.boot.CommandLineRunner
,应用启动成功后开启创建任务@Component
public class InitScheduleOfAppStarted implements CommandLineRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(InitScheduleOfAppStarted.class); @Autowired
private SysJobService sysJobService;
// 任务 Bean 交由 Spring 管理,并注入任务所需的 Bean 实例
@Autowired
private SpringJobFactory springJobFactory; @Override
public void run(String... args) throws Exception {
Map<String, String> runJob = new HashMap();
runJob.put("jobStatus", "1");
List<SysJob> jobList = sysJobService.querySysJobList(runJob); if (null == jobList || jobList.size() <= 0) {
LOGGER.info("app started,暂无需要执行的任务");
} SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
// 注入 spring 示例,否则执行时找不到 spring 容器中的 bean
scheduler.setJobFactory(springJobFactory);
scheduler.start(); for (SysJob sysJob : jobList) { // jobDetail
String jobName = sysJob.getJobName();
String jobGroup = sysJob.getJobGroup();
JobDetail jobDetail = JobBuilder.newJob(getClass(sysJob.getJobClassPath()).getClass())
.withIdentity(jobName, jobGroup)
.build();
// jobTriller
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity(jobName, jobGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(sysJob.getJobCron()))
.build();
// 关联
scheduler.scheduleJob(jobDetail, cronTrigger);
}
} private static Job getClass(String jobClassPath) throws Exception{
Class<?> aClass = Class.forName(jobClassPath);
return (Job) aClass.newInstance();
}
}继承
org.springframework.scheduling.quartz.AdaptableJobFactory
实例化和依赖注入 Spring Bean 实例@Component
public class SpringJobFactory extends AdaptableJobFactory { @Autowired
private AutowireCapableBeanFactory capableBeanFactory; @Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
SpringBoot + Quartz 集成的更多相关文章
- SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)
最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...
- spring-boot-2.0.3之quartz集成,不是你想的那样哦!
前言 开心一刻 晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?” 我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们 ...
- spring-boot-2.0.3之quartz集成,数据源问题,源码探究
前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...
- spring-boot-2.0.3之quartz集成,最佳实践
前言 开心一刻 快过年了,大街上,爷爷在给孙子示范摔炮怎么放,嘴里还不停念叨:要像这样,用劲甩才能响.示范了一个,两个,三个... 孙子终于忍不住了,抱着爷爷的腿哭起来:爷呀,你给我剩个吧! 新的一年 ...
- spring-boot+quartz的CRUD动态任务管理系统
版权声明:作者: 小柒 出处: https://blog.52itstyle.com 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大 ...
- Springboot+Quartz+druid+多库
很久以前就用过quartz,现在重新用起,主要实现集群方式启动,并且支持多数据源注入到job中.网上demo很多,方法大同小异.但关于数据源注入的深入介绍不多,不错的文章:<spring-boo ...
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等. Quartz核心是调度器,还采用多线程管理. 1.持久化任务:当应用程序停止运行时,所有调度信 ...
- Quartz集成springMVC 的方案一
Quartz是一个开放源码项目,专注于任务调度器. springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中. 步骤: 1.引入所需要的jar包 2 ...
- ABP文档 - Quartz 集成
文档目录 本节内容: 简介 安装 创建工作 调度工作 更多 简介 Quartz 是一个功能完整的开源工作调度系统,可用于最小的应用到一个大型的企业系统.Abp.Quartz 包简单地把Quartz集成 ...
- Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)
当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...
随机推荐
- TS不能将类型“any[]”分配给类型“never[]”
一.问题 在处理接口返回的数据,赋值给store中的数组时,报类型错误 data:{ cateList: [] } const getCateList = async () => { const ...
- drf-day8——断点调试、认证.权限.频率的源码分析、基于APIView编写分页、全局异常处理
目录 一.断点调试使用 二.认证,权限,频率源码分析(了解) 2.1 权限类的执行源码 2.2 认证源码分析 2.3 频率源码分析 2.4 自定义频率类(了解) 2.5 SimpleRateThrot ...
- python实现通用json导入到mysql
import json from Db import Db db = Db() ''' 参考配置文件 { "file": "test.json", " ...
- 打开MASA Blazor的正确姿势2:组件总览
官网文档按拼音罗列组件,且部分嵌套组件没有在导航栏内列出,不利于浏览查阅.本篇文章的主要目的,主要是对所有组件按大家习惯的方式进行分类,简要介绍组件,并建立跳转官方文档的链接. 一.导航布局类 1 ...
- JWT的原理及使用
目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...
- selenium结合tenacity的retry实现验证码失败重试
说在前面 验证码登录的demo后续可以单独讲解,VIP学员对这部分应该都是掌握的,此处不再赘述 本文假设了一个场景 你通过OCR识别的验证码是有一定的错误几率的 本文是通过识别后的验证码去加一个随机字 ...
- 用 HTTP 协议下载资源(WinINet 实现)
用 HTTP 协议下载资源(WinINet 实现) WinINet 使用 HTTP 协议下载资源的流程 相关函数 InternetCrackUrl 解析 URL BOOL InternetCrackU ...
- LG P4980【模板】Pólya 定理
\(\text{Solution}\) \[ans = \frac{1}{n}\sum_{i=1}^n n^{(i,n)} = \frac{1}{n}\sum_{d|n}n^d\varphi(\fra ...
- 触觉仿真系统:Force Dimension+CHAI 3D
推荐:将 NSDT场景编辑器 加入你的3D开发工具链 Force Dimension 成立于2001年,总部在瑞士,比sensable 晚了8年,开发的理念也不一样,他们开发是连杆式力反馈触觉系统,仿 ...
- PostgreSQL 并行计算算法,参数,强制并行度设置
一.优化器并行计算的并行度计算方法 1.总worker进程数 postgres=# show ; max_worker_processes ---------------------- 128 (1 ...