任务调度Quartz、api文档管理Swagger、Websocket协议

更新时间:2023-06-02 20:19:55 阅读: 评论:0

任务调度Quartz、api⽂档管理Swagger、Websocket协议QuartZ
概述
任务调度就是控制定时任务的执⾏,⽐如订单超时、注册验证码等等都可以使⽤任务调度实现
Quartz⼊门案例
1. 导⼊依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
2. 创建⼀个类MyJob实现接⼝Job,这个类编写我们要实现的任务
public class MyJob implements Job {
/**
* 在这个⽅法⾥⾯编写任务逻辑
* @param context 这个对象可以获取调⽤本任务的JobDetail和Trigger,可通过这两个对象来从外界获取参数
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext context)throws JobExecutionException {
//获取JobDetail传⼊的参数
JobDataMap jobDataMap = JobDetail().getJobDataMap();
System.out.("name"));
System.out.println("hello");
}
}
3. 创建⼀个类MyScheduler,这个类来对我们要实现的任务进⾏调度
public class MyScheduler {
public static void main(String[] args)throws SchedulerException {
//构造JobDetail对象
JobDetail jobDetail = JobBuilder
.newJob(MyJob.class)//JobDetail绑定的任务类
.withIdentity("myJob")//任务的标识符
.usingJobData("name","张三")//传⼊参数
.
build();
//构造⼀个触发器,该触发器将⽴即执⾏,间隔两秒执⾏⼀次,⼀直重复
SimpleTrigger trigger = wTrigger().withIdentity("myJob")
.startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.build();
//使⽤调度⼯⼚构造⼀个调度对象,该调度对象将JobDetail和trigger绑定并开启任务调度
StdSchedulerFactory factory =new StdSchedulerFactory();
Scheduler scheduler = Scheduler();
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
}
}
cron表达式
调度的构建有多种,⽐上⽅使⽤的SimpleScheduler更加灵活的的cron表达式的⽅式,这种⽅式可以灵活的实现个性化的任务调度
分布式任务调度
在分布式系统中,为了提⾼性能,任务调度在多台服务器上进⾏,存在内存中的任务调度就不好⽤了;于是要对调度规则进⾏持久化,在官⽹的源码压缩包中src\org\quartz\impl\jdbcjobstore⽬录下就有对应各种数据库的建表sql脚本⽂件,这⾥使⽤oracle进⾏⽰例
代码实现
bbc新闻台1. 建表语句
--
-- A hint submitted by a ur: Oracle DB MUST be created as "shared" and the
-
- job_queue_process parameter  must be greater than 2
-- However, the ttings are pretty much standard after any
-- Oracle install, so most urs need not worry about this.
--
-- Many other urs (including the primary author of Quartz) have had success
-- runing in dedicated mode, so only consider the above as a hint ;-)
--
delete from qrtz_fired_triggers;
delete from qrtz_simple_triggers;
delete from qrtz_simprop_triggers;
delete from qrtz_cron_triggers;
delete from qrtz_blob_triggers;
delete from qrtz_triggers;
delete from qrtz_job_details;
delete from qrtz_calendars;
delete from qrtz_paud_trigger_grps;
delete from qrtz_locks;
delete from qrtz_scheduler_state;
drop table qrtz_calendars;
drop table qrtz_fired_triggers;
drop table qrtz_blob_triggers;
drop table qrtz_cron_triggers;
drop table qrtz_simple_triggers;
drop table qrtz_simprop_triggers;
drop table qrtz_triggers;
drop table qrtz_job_details;
drop table qrtz_paud_trigger_grps;
drop table qrtz_locks;
drop table qrtz_scheduler_state;
CREATE TABLE qrtz_job_details
(
SCHED_NAME VARCHAR2(120)NOT NULL,
JOB_NAME  VARCHAR2(200)NOT NULL,
JOB_GROUP VARCHAR2(200)NOT NULL,
DESCRIPTION VARCHAR2(250)NULL,
JOB_CLASS_NAME  VARCHAR2(250)NOT NULL,
IS_DURABLE VARCHAR2(1)NOT NULL,
IS_NONCONCURRENT VARCHAR2(1)NOT NULL,
IS_UPDATE_DATA VARCHAR2(1)NOT NULL,
REQUESTS_RECOVERY VARCHAR2(1)NOT NULL,
JOB_DATA BLOB NULL,
CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE qrtz_triggers
gap是什么意思
(
shunSCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
JOB_NAME  VARCHAR2(200)NOT NULL,
JOB_GROUP VARCHAR2(200)NOT NULL,
JOB_GROUP VARCHAR2(200)NOT NULL,
DESCRIPTION VARCHAR2(250)NULL,
NEXT_FIRE_TIME NUMBER(13)NULL,
PREV_FIRE_TIME NUMBER(13)NULL,
PRIORITY NUMBER(13)NULL,
TRIGGER_STATE VARCHAR2(16)NOT NULL,
TRIGGER_TYPE VARCHAR2(8)NOT NULL,
START_TIME NUMBER(13)NOT NULL,
END_TIME NUMBER(13)NULL,
CALENDAR_NAME VARCHAR2(200)NULL,
MISFIRE_INSTR NUMBER(2)NULL,
JOB_DATA BLOB NULL,
CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY(SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE qrtz_simple_triggers
(
SCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
REPEAT_COUNT NUMBER(7)NOT NULL,
REPEAT_INTERVAL NUMBER(12)NOT NULL,
TIMES_TRIGGERED NUMBER(10)NOT NULL,
CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_cron_triggers
(
SCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
CRON_EXPRESSION VARCHAR2(120)NOT NULL,
TIME_ZONE_ID VARCHAR2(80),
CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_simprop_triggers
(
SCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
STR_PROP_1 VARCHAR2(512)NULL,
STR_PROP_2 VARCHAR2(512)NULL,
STR_PROP_3 VARCHAR2(512)NULL,
INT_PROP_1 NUMBER(10)NULL,
INT_PROP_2 NUMBER(10)NULL,
LONG_PROP_1 NUMBER(13)NULL,
LONG_PROP_2 NUMBER(13)NULL,
DEC_PROP_1 NUMERIC(13,4)NULL,
DEC_PROP_2 NUMERIC(13,4)NULL,
BOOL_PROP_1 VARCHAR2(1)NULL,
BOOL_PROP_2 VARCHAR2(1)NULL,soku
CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
thekillersCREATE TABLE qrtz_blob_triggers
(
SCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
BLOB_DATA BLOB NULL,
CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
)
;
CREATE TABLE qrtz_calendars
(
SCHED_NAME VARCHAR2(120)NOT NULL,
CALENDAR_NAME  VARCHAR2(200)NOT NULL,
CALENDAR BLOB NOT NULL,
CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY(SCHED_NAME,CALENDAR_NAME)
);
CREATE TABLE qrtz_paud_trigger_grps
(
SCHED_NAME VARCHAR2(120)NOT NULL,
TRIGGER_GROUP  VARCHAR2(200)NOT NULL,
CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY(SCHED_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_fired_triggers
(
SCHED_NAME VARCHAR2(120)NOT NULL,
ENTRY_ID VARCHAR2(95)NOT NULL,
TRIGGER_NAME VARCHAR2(200)NOT NULL,
TRIGGER_GROUP VARCHAR2(200)NOT NULL,
INSTANCE_NAME VARCHAR2(200)NOT NULL,
FIRED_TIME NUMBER(13)NOT NULL,
SCHED_TIME NUMBER(13)NOT NULL,
PRIORITY NUMBER(13)NOT NULL,
STATE VARCHAR2(16)NOT NULL,
JOB_NAME VARCHAR2(200)NULL,考研英语词汇
JOB_GROUP VARCHAR2(200)NULL,
IS_NONCONCURRENT VARCHAR2(1)NULL,
REQUESTS_RECOVERY VARCHAR2(1)NULL,
CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY(SCHED_NAME,ENTRY_ID)
);
CREATE TABLE qrtz_scheduler_state
uncopyrightable(
SCHED_NAME VARCHAR2(120)NOT NULL,
INSTANCE_NAME VARCHAR2(200)NOT NULL,
LAST_CHECKIN_TIME NUMBER(13)NOT NULL,
CHECKIN_INTERVAL NUMBER(13)NOT NULL,
CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY(SCHED_NAME,INSTANCE_NAME)
);
CREATE TABLE qrtz_locks
(
SCHED_NAME VARCHAR2(120)NOT NULL,
LOCK_NAME  VARCHAR2(40)NOT NULL,
CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY(SCHED_NAME,LOCK_NAME)
);
create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_S
TATE);
create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
2. 导⼊ojdbc与c3p0连接池依赖,配置quartz属性⽂件
# 修改存储⽅式,默认是内存,改为JobStoreTX改为独⽴环境
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
# ⾃定义数据源名称
org.quartz.jobStore.dataSource=myDS
长野地震# 数据库相关配置
org.DS.driver=oracle.jdbc.OracleDriver
org.DS.URL=jdbc:oracle:thin:@localhost:1521:XE
org.DS.ur=c##laowa
org.DS.password=laowa
3. 修改MyScheduler,因为持久化后若重启调度,由于数据库已有该Job,会报错,于是可以先查看数据库是否有该Job的调度,如果
有则继承该Job继续运⾏,没有则创建(以标识符JobKey来判定)
public class MyScheduler2 {
public static void main(String[] args)throws SchedulerException {quarterly
StdSchedulerFactory factory =new StdSchedulerFactory();
Scheduler scheduler = Scheduler();
//通过标识符查看数据库是否已经存在改调度
List<?extends Trigger> triggers = TriggersOfJob(new JobKey("myJob"));
if(triggers.size()>0){
for(Trigger trigger:triggers){
//判断触发器类型,符合则恢复原Job
if(trigger instanceof CronTrigger||trigger instanceof SimpleTrigger){
}
}
}el{
//如果不存在则新建⼀个JobDetail和Trigger
JobDetail jobDetail = JobBuilder
.newJob(MyJob.class)
.
withIdentity("myJob")
.usingJobData("name","张三")
.build();
SimpleTrigger simpleTrigger = wTrigger()
federal rerve.withIdentity("myJob")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
.build();
scheduler.scheduleJob(jobDetail,simpleTrigger);
}
scheduler.start();
}
}
做了持久化之后,只要在数据库中有对应的数据存在,另外任务执⾏也会带着这个任务执⾏,要停⽌Job需要对数据库的数据删除SpringBoot整合Quartz

本文发布于:2023-06-02 20:19:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/837074.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   调度   任务调度   任务   实现   存在
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图