SpringBoot2.6.3集成quartz的方式
时间:2022-10-23 11:17:14|栏目:JAVA代码|点击: 次
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
中
栏 目:JAVA代码
下一篇:SpringBoot 整合 Shiro 密码登录的实现代码
本文标题:SpringBoot2.6.3集成quartz的方式
本文地址:http://www.codeinn.net/misctech/217125.html