SpringBoot2.6.3集成quartz的方式
quartz使用
quartz启动需要数据库有很多表的支持,这些表的建表脚本可以通过如下方式找到
如何找到quartz的数据库脚本
在这里下载,需要注意的是下载2.2.3这个版本,不知道为什么高版本的反而没有,真是佛了
集成Springboot
代码
yml配置
spring:
application:
name: demo-excel
datasource:
url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/quartz_demo?zeroDateTimeBehavior=convertToNull
password: quartz_demo
username: quartz_demo
driver-class-name: com.mysql.cj.jdbc.Driver
name: datasource1
quartz:
# quartz任务存储类型:jdbc或memory
job-store-type: jdbc
# 关闭时等待任务完成
wait-for-jobs-to-complete-on-shutdown: true
# 可以覆盖已有的任务
overwrite-existing-jobs: true
properties:
org:
quartz:
scheduler:
# 调度器实例名称
instanceName: scheduler
# 调度器实例ID自动生成
instanceId: AUTO
jobStore:
class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# quartz相关表前缀
tablePrefix: QRTZ_
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
# 设置并发线程数量
threadCount: 10
# 指定线程优先级
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
server:
port: 8190
mybatis-plus:
mapper-locations: classpath*:/mapperxml/*.xml
实现一个最简单的任务,该任务输出1111
@Component
public class TestJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext)
throws JobExecutionException {
// 任务的具体逻辑
System.out.println(1111);
}
}
配置这个任务的执行计划
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail() {
JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
.withIdentity("test", "test")
.storeDurably()
.build();
return jobDetail;
}
public Trigger trigger() {
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(jobDetail())
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
return trigger;
}
启动任务会看到控制台每秒钟打印一次1111
进阶
上诉任务是配置在代码中,那么如果我们想把任务配置数据库中,这样我们就可以做一个定时任务的维护页面,可以对定时任务的触发规则修改,及修改删除定时任务应该怎么做呢?
先定义一张存储定时任务的表
-- auto-generated definition
create table sys_job
(
id bigint not null primary key,
job_name varchar(64) not null comment '任务名称',
job_group varchar(64) not null comment '任务组名',
method_name varchar(500) null comment '任务方法',
method_params varchar(50) null comment '方法参数',
cron_expression varchar(255) null comment 'cron执行表达式',
misfire_policy varchar(20) default '3' null comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
concurrent char default '1' null comment '是否并发执行(0允许 1禁止)',
status char default '0' null comment '状态(0正常 1暂停)',
create_by varchar(64) null comment '创建者',
create_time datetime null comment '创建时间',
update_by varchar(64) null comment '更新者',
update_time datetime null comment '更新时间',
remark varchar(500) null comment '备注信息'
)
comment '定时任务调度表';
插入一条数据
INSERT INTO quartz_demo.sys_job (id, job_name, job_group, method_name, method_params, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark) VALUES (1, 'testJob2', 'test2', 'exec', null, '* * * * * ?', '2', '1', '0', null, null, null, null, null);
同时定义一张执行结果记录表
-- auto-generated definition
create table sys_job_log
(
job_log_id int auto_increment comment '任务日志ID'
primary key,
job_name varchar(64) not null comment '任务名称',
job_group varchar(64) not null comment '任务组名',
method_name varchar(500) null comment '任务方法',
method_params varchar(50) null comment '方法参数',
job_message varchar(500) null comment '日志信息',
status char default '0' null comment '执行状态(0正常 1失败)',
exception_info varchar(2000) null comment '异常信息',
create_time datetime null comment '创建时间'
)
comment '定时任务调度日志表';
项目启动时读取这张表里的数据放到quartz中执行
由于代码太多了,这边就不列出来代码了,demo已经上传到GitHub,项目基于springboot、mybatisplus。启动加载任务的代码在com.bxoon.service.impl.SysJobServiceImpl
中
到此这篇关于SpringBoot2.6.3集成quartz的文章就介绍到这了,更多相关SpringBoot集成quartz内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341