quartz 注解 mysql_SpringBoot+Quartz+MySQL实现分布式定时任务

本文详细介绍了如何使用SpringBoot、Quartz和MySQL搭建分布式定时任务。首先介绍了添加依赖,接着创建Quartz所需的MySQL表,然后配置线程池,确保足够线程执行任务。接着配置了Spring的注入以避免空指针异常,添加Quartz的属性文件以进行分布式部署。之后定义了任务类,并配置定时器,最后启动和测试定时任务。遇到任务执行异常时,建议使用try-catch处理并记录日志。
摘要由CSDN通过智能技术生成

第一步:引入依赖

org.quartz-scheduler

quartz

2.3.0

org.quartz-scheduler

quartz-jobs

2.3.0

org.springframework

spring-context-support

第二步:创建MySQL表,Quartz是基于表来感知其他定时任务节点的,节点间不会直接通信。建表语句在jar包中自带了。

org\quartz-scheduler\quartz\2.3.0\quartz-2.3.0.jar!\org\quartz\impl\jdbcjobstore\tables_mysql_innodb.sql

4582ac92f13e02c18ea92733c3f13c04.png

第三步:配置线程池,我这里是因为项目的其他地方有用到线程池,你也可以选择在Quartz的配置类中注入。

(我在其他位置使用了线程池,占用了一个线程,所以当我将核心线程数量设置为1时,定时任务不会执行;需确保有足够的线程来执行)

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;importjava.util.concurrent.Executor;importjava.util.concurrent.ThreadPoolExecutor;/*** @Author 1

* @Description 配置线程池交给Spring容器管理

* @Date 2020/8/26 18:23

**/@Configurationpublic classExecturConfig {

@Bean("taskExector")publicExecutor taskExector() {

ThreadPoolTaskExecutor executor= newThreadPoolTaskExecutor();//核心线程池数量

executor.setCorePoolSize(2);//最大线程数量

executor.setMaxPoolSize(5);//线程池的队列容量

executor.setQueueCapacity(10);//线程名称的前缀

executor.setThreadNamePrefix("expireOrderHandle-");//配置拒绝策略

executor.setRejectedExecutionHandler(newThreadPoolExecutor.AbortPolicy());

executor.initialize();returnexecutor;

}

}

第四步:因为定时任务业务中需要使用到注入Spring容器的类,所以配置注入,否则报空指针异常。

importorg.quartz.spi.TriggerFiredBundle;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.config.AutowireCapableBeanFactory;importorg.springframework.scheduling.quartz.AdaptableJobFactory;importorg.springframework.stereotype.Component;

@Component("myAdaptableJobFactory")public class MyAdaptableJobFactory extendsAdaptableJobFactory {//AutowireCapableBeanFactory 可以将一个对象添加到SpringIOC容器中,并且完成该对象注入

@AutowiredprivateAutowireCapableBeanFactory autowireCapableBeanFactory;/*** 该方法需要将实例化的任务对象手动的添加到springIOC容器中并且完成对象的注入*/@Overrideprotected Object createJobInstance(TriggerFiredBundle bundle) throwsExceptio

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值