SpringBoot2.6.3集成quartz的方式

网友投稿 541 2022-10-29

SpringBoot2.6.3集成quartz的方式

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()

http:// .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,

http:// 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)http:// 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中

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Firespace适用于希望使用Firebase快速开发应用程序的开发人员
下一篇:提供了在 Windows 下编译和运行 Swift 语言程序的支持 (cygwin, msvc, mingw)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~