diff --git a/README.md b/README.md
index d421248..c40f890 100644
--- a/README.md
+++ b/README.md
@@ -47,4 +47,12 @@ eyJhbGciOiJIUzUxMiJ9.eyJhdWQiOiJCRDg0REQ0MkE3MjM0QjA1QjBDNUQxMTYxNjEzMkFDNCIsImp
12 [git 拉取指定的远程分支(三种方式](https://blog.csdn.net/duobaohongtu3/article/details/123572094)
-13 [springBoot 获取请求头header里面的信息方式](https://www.pudn.com/news/62905fefbf399b7f352590db.html)
\ No newline at end of file
+13 [springBoot 获取请求头header里面的信息方式](https://www.pudn.com/news/62905fefbf399b7f352590db.html)
+
+14、[SpringBoot+Quartz动态管理定时任务](https://blog.csdn.net/xy294636185/article/details/123951509)
+
+15、[SpringBoot搭配Quartz实现动态定时任务](https://blog.csdn.net/wl_Honest/article/details/122176062)
+
+16、[SpringBoot整合Quartz](https://blog.csdn.net/weixin_38192427/article/details/121111677)
+
+17、[Springboot整合Quartz实现动态定时任务](https://segmentfault.com/a/1190000016554033)
\ No newline at end of file
diff --git a/note.md b/note.md
index 07ad0c1..e65b028 100644
--- a/note.md
+++ b/note.md
@@ -14,4 +14,185 @@
支付回调地址:http://116.77.235.153:8989/api/Pay/payCallback
-渠道isli关联编码:999998-000000001920-2
\ No newline at end of file
+渠道isli关联编码:999998-000000001920-2
+
+# 定时人物 sql
+#
+# In your Quartz properties file, you'll need to set
+# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+#
+#
+# By: Ron Cordell - roncordell
+# I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.
+
+DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
+DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
+DROP TABLE IF EXISTS QRTZ_LOCKS;
+DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
+DROP TABLE IF EXISTS QRTZ_CALENDARS;
+
+CREATE TABLE QRTZ_JOB_DETAILS(
+SCHED_NAME VARCHAR(120) NOT NULL,
+JOB_NAME VARCHAR(200) NOT NULL,
+JOB_GROUP VARCHAR(200) NOT NULL,
+DESCRIPTION VARCHAR(250) NULL,
+JOB_CLASS_NAME VARCHAR(250) NOT NULL,
+IS_DURABLE VARCHAR(1) NOT NULL,
+IS_NONCONCURRENT VARCHAR(1) NOT NULL,
+IS_UPDATE_DATA VARCHAR(1) NOT NULL,
+REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
+JOB_DATA BLOB NULL,
+PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_TRIGGERS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+TRIGGER_NAME VARCHAR(200) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+JOB_NAME VARCHAR(200) NOT NULL,
+JOB_GROUP VARCHAR(200) NOT NULL,
+DESCRIPTION VARCHAR(250) NULL,
+NEXT_FIRE_TIME BIGINT(13) NULL,
+PREV_FIRE_TIME BIGINT(13) NULL,
+PRIORITY INTEGER NULL,
+TRIGGER_STATE VARCHAR(16) NOT NULL,
+TRIGGER_TYPE VARCHAR(8) NOT NULL,
+START_TIME BIGINT(13) NOT NULL,
+END_TIME BIGINT(13) NULL,
+CALENDAR_NAME VARCHAR(200) NULL,
+MISFIRE_INSTR SMALLINT(2) NULL,
+JOB_DATA BLOB NULL,
+PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
+REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+TRIGGER_NAME VARCHAR(200) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+REPEAT_COUNT BIGINT(7) NOT NULL,
+REPEAT_INTERVAL BIGINT(12) NOT NULL,
+TIMES_TRIGGERED BIGINT(10) NOT NULL,
+PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_CRON_TRIGGERS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+TRIGGER_NAME VARCHAR(200) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+CRON_EXPRESSION VARCHAR(120) NOT NULL,
+TIME_ZONE_ID VARCHAR(80),
+PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_SIMPROP_TRIGGERS
+ (
+ SCHED_NAME VARCHAR(120) NOT NULL,
+ TRIGGER_NAME VARCHAR(200) NOT NULL,
+ TRIGGER_GROUP VARCHAR(200) NOT NULL,
+ STR_PROP_1 VARCHAR(512) NULL,
+ STR_PROP_2 VARCHAR(512) NULL,
+ STR_PROP_3 VARCHAR(512) NULL,
+ INT_PROP_1 INT NULL,
+ INT_PROP_2 INT NULL,
+ LONG_PROP_1 BIGINT NULL,
+ LONG_PROP_2 BIGINT NULL,
+ DEC_PROP_1 NUMERIC(13,4) NULL,
+ DEC_PROP_2 NUMERIC(13,4) NULL,
+ BOOL_PROP_1 VARCHAR(1) NULL,
+ BOOL_PROP_2 VARCHAR(1) NULL,
+ PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+ FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+ REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+TRIGGER_NAME VARCHAR(200) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+BLOB_DATA BLOB NULL,
+PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
+FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_CALENDARS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+CALENDAR_NAME VARCHAR(200) NOT NULL,
+CALENDAR BLOB NOT NULL,
+PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+ENTRY_ID VARCHAR(95) NOT NULL,
+TRIGGER_NAME VARCHAR(200) NOT NULL,
+TRIGGER_GROUP VARCHAR(200) NOT NULL,
+INSTANCE_NAME VARCHAR(200) NOT NULL,
+FIRED_TIME BIGINT(13) NOT NULL,
+SCHED_TIME BIGINT(13) NOT NULL,
+PRIORITY INTEGER NOT NULL,
+STATE VARCHAR(16) NOT NULL,
+JOB_NAME VARCHAR(200) NULL,
+JOB_GROUP VARCHAR(200) NULL,
+IS_NONCONCURRENT VARCHAR(1) NULL,
+REQUESTS_RECOVERY VARCHAR(1) NULL,
+PRIMARY KEY (SCHED_NAME,ENTRY_ID))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_SCHEDULER_STATE (
+SCHED_NAME VARCHAR(120) NOT NULL,
+INSTANCE_NAME VARCHAR(200) NOT NULL,
+LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
+CHECKIN_INTERVAL BIGINT(13) NOT NULL,
+PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
+ENGINE=InnoDB;
+
+CREATE TABLE QRTZ_LOCKS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+LOCK_NAME VARCHAR(40) NOT NULL,
+PRIMARY KEY (SCHED_NAME,LOCK_NAME))
+ENGINE=InnoDB;
+
+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_STATE);
+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_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);
+
+commit;
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b996971..542bfab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -109,12 +109,6 @@
4.5.9
-
-
-
-
-
-
com.auth0
@@ -122,6 +116,12 @@
3.8.3
+
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
+
diff --git a/src/main/java/cn/chjyj/szwh/bean/CronTrigger.java b/src/main/java/cn/chjyj/szwh/bean/CronTrigger.java
new file mode 100644
index 0000000..a152326
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/CronTrigger.java
@@ -0,0 +1,23 @@
+package cn.chjyj.szwh.bean;
+
+public class CronTrigger extends CronTriggerKey {
+ private String cronExpression;
+
+ private String timeZoneId;
+
+ public String getCronExpression() {
+ return cronExpression;
+ }
+
+ public void setCronExpression(String cronExpression) {
+ this.cronExpression = cronExpression == null ? null : cronExpression.trim();
+ }
+
+ public String getTimeZoneId() {
+ return timeZoneId;
+ }
+
+ public void setTimeZoneId(String timeZoneId) {
+ this.timeZoneId = timeZoneId == null ? null : timeZoneId.trim();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/CronTriggerKey.java b/src/main/java/cn/chjyj/szwh/bean/CronTriggerKey.java
new file mode 100644
index 0000000..222991f
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/CronTriggerKey.java
@@ -0,0 +1,33 @@
+package cn.chjyj.szwh.bean;
+
+public class CronTriggerKey {
+ private String schedName;
+
+ private String triggerName;
+
+ private String triggerGroup;
+
+ public String getSchedName() {
+ return schedName;
+ }
+
+ public void setSchedName(String schedName) {
+ this.schedName = schedName == null ? null : schedName.trim();
+ }
+
+ public String getTriggerName() {
+ return triggerName;
+ }
+
+ public void setTriggerName(String triggerName) {
+ this.triggerName = triggerName == null ? null : triggerName.trim();
+ }
+
+ public String getTriggerGroup() {
+ return triggerGroup;
+ }
+
+ public void setTriggerGroup(String triggerGroup) {
+ this.triggerGroup = triggerGroup == null ? null : triggerGroup.trim();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/JobAndTrigger.java b/src/main/java/cn/chjyj/szwh/bean/JobAndTrigger.java
new file mode 100644
index 0000000..2ab9ad7
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/JobAndTrigger.java
@@ -0,0 +1,130 @@
+package cn.chjyj.szwh.bean;
+
+import java.math.BigInteger;
+
+/**
+ * Quartz 定时bean
+ */
+
+public class JobAndTrigger {
+ /**
+ * 定时任务名称
+ */
+ private String jobName;
+ /**
+ * 定时任务组
+ */
+ private String jobGroup;
+ /**
+ * 定时任务全类名
+ */
+ private String jobClassName;
+ /**
+ * 触发器名称
+ */
+ private String triggerName;
+ /**
+ * 触发器组
+ */
+ private String triggerGroup;
+ /**
+ * 重复间隔
+ */
+ private BigInteger repeatInterval;
+ /**
+ * 触发次数
+ */
+ private BigInteger timesTriggered;
+ /**
+ * cron 表达式
+ */
+ private String cronExpression;
+ /**
+ * 时区
+ */
+ private String timeZoneId;
+ /**
+ * 定时任务状态
+ */
+ private String triggerState;
+
+ public String getJobName() {
+ return jobName;
+ }
+
+ public void setJobName(String jobName) {
+ this.jobName = jobName;
+ }
+
+ public String getJobGroup() {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup) {
+ this.jobGroup = jobGroup;
+ }
+
+ public String getJobClassName() {
+ return jobClassName;
+ }
+
+ public void setJobClassName(String jobClassName) {
+ this.jobClassName = jobClassName;
+ }
+
+ public String getTriggerName() {
+ return triggerName;
+ }
+
+ public void setTriggerName(String triggerName) {
+ this.triggerName = triggerName;
+ }
+
+ public String getTriggerGroup() {
+ return triggerGroup;
+ }
+
+ public void setTriggerGroup(String triggerGroup) {
+ this.triggerGroup = triggerGroup;
+ }
+
+ public BigInteger getRepeatInterval() {
+ return repeatInterval;
+ }
+
+ public void setRepeatInterval(BigInteger repeatInterval) {
+ this.repeatInterval = repeatInterval;
+ }
+
+ public BigInteger getTimesTriggered() {
+ return timesTriggered;
+ }
+
+ public void setTimesTriggered(BigInteger timesTriggered) {
+ this.timesTriggered = timesTriggered;
+ }
+
+ public String getCronExpression() {
+ return cronExpression;
+ }
+
+ public void setCronExpression(String cronExpression) {
+ this.cronExpression = cronExpression;
+ }
+
+ public String getTimeZoneId() {
+ return timeZoneId;
+ }
+
+ public void setTimeZoneId(String timeZoneId) {
+ this.timeZoneId = timeZoneId;
+ }
+
+ public String getTriggerState() {
+ return triggerState;
+ }
+
+ public void setTriggerState(String triggerState) {
+ this.triggerState = triggerState;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/JobDetail.java b/src/main/java/cn/chjyj/szwh/bean/JobDetail.java
new file mode 100644
index 0000000..6c85e89
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/JobDetail.java
@@ -0,0 +1,73 @@
+package cn.chjyj.szwh.bean;
+
+public class JobDetail extends JobDetailKey {
+ private String description;
+
+ private String jobClassName;
+
+ private String isDurable;
+
+ private String isNonconcurrent;
+
+ private String isUpdateData;
+
+ private String requestsRecovery;
+
+ private byte[] jobData;
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description == null ? null : description.trim();
+ }
+
+ public String getJobClassName() {
+ return jobClassName;
+ }
+
+ public void setJobClassName(String jobClassName) {
+ this.jobClassName = jobClassName == null ? null : jobClassName.trim();
+ }
+
+ public String getIsDurable() {
+ return isDurable;
+ }
+
+ public void setIsDurable(String isDurable) {
+ this.isDurable = isDurable == null ? null : isDurable.trim();
+ }
+
+ public String getIsNonconcurrent() {
+ return isNonconcurrent;
+ }
+
+ public void setIsNonconcurrent(String isNonconcurrent) {
+ this.isNonconcurrent = isNonconcurrent == null ? null : isNonconcurrent.trim();
+ }
+
+ public String getIsUpdateData() {
+ return isUpdateData;
+ }
+
+ public void setIsUpdateData(String isUpdateData) {
+ this.isUpdateData = isUpdateData == null ? null : isUpdateData.trim();
+ }
+
+ public String getRequestsRecovery() {
+ return requestsRecovery;
+ }
+
+ public void setRequestsRecovery(String requestsRecovery) {
+ this.requestsRecovery = requestsRecovery == null ? null : requestsRecovery.trim();
+ }
+
+ public byte[] getJobData() {
+ return jobData;
+ }
+
+ public void setJobData(byte[] jobData) {
+ this.jobData = jobData;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/JobDetailKey.java b/src/main/java/cn/chjyj/szwh/bean/JobDetailKey.java
new file mode 100644
index 0000000..688684b
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/JobDetailKey.java
@@ -0,0 +1,33 @@
+package cn.chjyj.szwh.bean;
+
+public class JobDetailKey {
+ private String schedName;
+
+ private String jobName;
+
+ private String jobGroup;
+
+ public String getSchedName() {
+ return schedName;
+ }
+
+ public void setSchedName(String schedName) {
+ this.schedName = schedName == null ? null : schedName.trim();
+ }
+
+ public String getJobName() {
+ return jobName;
+ }
+
+ public void setJobName(String jobName) {
+ this.jobName = jobName == null ? null : jobName.trim();
+ }
+
+ public String getJobGroup() {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup) {
+ this.jobGroup = jobGroup == null ? null : jobGroup.trim();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/Trigger.java b/src/main/java/cn/chjyj/szwh/bean/Trigger.java
new file mode 100644
index 0000000..a9a0da6
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/Trigger.java
@@ -0,0 +1,133 @@
+package cn.chjyj.szwh.bean;
+
+public class Trigger extends TriggerKey {
+ private String jobName;
+
+ private String jobGroup;
+
+ private String description;
+
+ private Long nextFireTime;
+
+ private Long prevFireTime;
+
+ private Integer priority;
+
+ private String triggerState;
+
+ private String triggerType;
+
+ private Long startTime;
+
+ private Long endTime;
+
+ private String calendarName;
+
+ private Short misfireInstr;
+
+ private byte[] jobData;
+
+ public String getJobName() {
+ return jobName;
+ }
+
+ public void setJobName(String jobName) {
+ this.jobName = jobName == null ? null : jobName.trim();
+ }
+
+ public String getJobGroup() {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup) {
+ this.jobGroup = jobGroup == null ? null : jobGroup.trim();
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description == null ? null : description.trim();
+ }
+
+ public Long getNextFireTime() {
+ return nextFireTime;
+ }
+
+ public void setNextFireTime(Long nextFireTime) {
+ this.nextFireTime = nextFireTime;
+ }
+
+ public Long getPrevFireTime() {
+ return prevFireTime;
+ }
+
+ public void setPrevFireTime(Long prevFireTime) {
+ this.prevFireTime = prevFireTime;
+ }
+
+ public Integer getPriority() {
+ return priority;
+ }
+
+ public void setPriority(Integer priority) {
+ this.priority = priority;
+ }
+
+ public String getTriggerState() {
+ return triggerState;
+ }
+
+ public void setTriggerState(String triggerState) {
+ this.triggerState = triggerState == null ? null : triggerState.trim();
+ }
+
+ public String getTriggerType() {
+ return triggerType;
+ }
+
+ public void setTriggerType(String triggerType) {
+ this.triggerType = triggerType == null ? null : triggerType.trim();
+ }
+
+ public Long getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Long startTime) {
+ this.startTime = startTime;
+ }
+
+ public Long getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(Long endTime) {
+ this.endTime = endTime;
+ }
+
+ public String getCalendarName() {
+ return calendarName;
+ }
+
+ public void setCalendarName(String calendarName) {
+ this.calendarName = calendarName == null ? null : calendarName.trim();
+ }
+
+ public Short getMisfireInstr() {
+ return misfireInstr;
+ }
+
+ public void setMisfireInstr(Short misfireInstr) {
+ this.misfireInstr = misfireInstr;
+ }
+
+ public byte[] getJobData() {
+ return jobData;
+ }
+
+ public void setJobData(byte[] jobData) {
+ this.jobData = jobData;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/bean/TriggerKey.java b/src/main/java/cn/chjyj/szwh/bean/TriggerKey.java
new file mode 100644
index 0000000..5beb8c6
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/bean/TriggerKey.java
@@ -0,0 +1,33 @@
+package cn.chjyj.szwh.bean;
+
+public class TriggerKey {
+ private String schedName;
+
+ private String triggerName;
+
+ private String triggerGroup;
+
+ public String getSchedName() {
+ return schedName;
+ }
+
+ public void setSchedName(String schedName) {
+ this.schedName = schedName == null ? null : schedName.trim();
+ }
+
+ public String getTriggerName() {
+ return triggerName;
+ }
+
+ public void setTriggerName(String triggerName) {
+ this.triggerName = triggerName == null ? null : triggerName.trim();
+ }
+
+ public String getTriggerGroup() {
+ return triggerGroup;
+ }
+
+ public void setTriggerGroup(String triggerGroup) {
+ this.triggerGroup = triggerGroup == null ? null : triggerGroup.trim();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/configure/QuartzConfig.java b/src/main/java/cn/chjyj/szwh/configure/QuartzConfig.java
new file mode 100644
index 0000000..7fb7573
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/configure/QuartzConfig.java
@@ -0,0 +1,59 @@
+package cn.chjyj.szwh.configure;
+
+import org.quartz.Scheduler;
+import org.quartz.ee.servlet.QuartzInitializerListener;
+import org.springframework.beans.factory.config.PropertiesFactoryBean;
+import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * @Author: CJ
+ * @Date: 2021-11-1 19:34
+ */
+@Configuration
+public class QuartzConfig implements SchedulerFactoryBeanCustomizer {
+
+ @Bean
+ public Properties properties() throws IOException {
+ PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
+ // 对quartz.properties文件进行读取
+ propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
+ // 在quartz.properties中的属性被读取并注入后再初始化对象
+ propertiesFactoryBean.afterPropertiesSet();
+ return propertiesFactoryBean.getObject();
+ }
+
+ @Bean
+ public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
+ SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
+ schedulerFactoryBean.setQuartzProperties(properties());
+ return schedulerFactoryBean;
+ }
+
+ /*
+ * quartz初始化监听器
+ */
+ @Bean
+ public QuartzInitializerListener executorListener() {
+ return new QuartzInitializerListener();
+ }
+
+ /*
+ * 通过SchedulerFactoryBean获取Scheduler的实例
+ */
+ @Bean
+ public Scheduler scheduler() throws IOException {
+ return schedulerFactoryBean().getScheduler();
+ }
+
+ @Override
+ public void customize(SchedulerFactoryBean schedulerFactoryBean) {
+
+ }
+}
diff --git a/src/main/java/cn/chjyj/szwh/controller/QuartzController.java b/src/main/java/cn/chjyj/szwh/controller/QuartzController.java
new file mode 100644
index 0000000..635e51d
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/controller/QuartzController.java
@@ -0,0 +1,176 @@
+package cn.chjyj.szwh.controller;
+
+import cn.chjyj.szwh.dto.JobAndTriggerDto;
+import cn.chjyj.szwh.service.QuartzService;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.quartz.SchedulerException;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @Author: CJ
+ * @Date: 2021-11-2 11:41
+ */
+@RestController
+@RequestMapping(path = "/quartz")
+public class QuartzController {
+
+ @Autowired
+ private QuartzService quartzService;
+
+ /**
+ * 新增定时任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @param tName 触发器名称
+ * @param tGroup 触发器组
+ * @param cron cron表达式
+ * @return ResultMap
+ */
+ @PostMapping(path = "/addjob")
+ @ResponseBody
+ public JSONObject addjob(String jName, String jGroup, String tName, String tGroup, String cron) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ quartzService.addjob(jName, jGroup, tName, tGroup, cron);
+ jsonObject.put("code",200);
+ jsonObject.put("msg","添加任务成功");
+ } catch (Exception e) {
+ e.printStackTrace();
+ jsonObject.put("code",400);
+ jsonObject.put("msg","添加任务失败");
+ }
+ return jsonObject;
+ }
+
+ /**
+ * 暂停任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @return ResultMap
+ */
+ @PostMapping(path = "/pausejob")
+ @ResponseBody
+ public JSONObject pausejob(String jName, String jGroup) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ quartzService.pausejob(jName, jGroup);
+ jsonObject.put("code",200);
+ jsonObject.put("msg","暂停任务成功");
+ } catch (SchedulerException e) {
+ e.printStackTrace();
+ jsonObject.put("code",200);
+ jsonObject.put("msg","暂停任务失败");
+ }
+ return jsonObject;
+ }
+
+ /**
+ * 恢复任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @return ResultMap
+ */
+ @PostMapping(path = "/resumejob")
+ @ResponseBody
+ public JSONObject resumejob(String jName, String jGroup) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ quartzService.resumejob(jName, jGroup);
+ jsonObject.put("code",200);
+ jsonObject.put("msg","恢复任务成功");
+ } catch (SchedulerException e) {
+ e.printStackTrace();
+ jsonObject.put("code",400);
+ jsonObject.put("msg","恢复任务失败");
+ }
+ return jsonObject;
+ }
+
+ /**
+ * 重启任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @param cron cron表达式
+ * @return ResultMap
+ */
+ @PostMapping(path = "/reschedulejob")
+ @ResponseBody
+ public JSONObject rescheduleJob(String jName, String jGroup, String cron) {
+ JSONObject jsonObject =new JSONObject();
+ try {
+ quartzService.rescheduleJob(jName, jGroup, cron);
+ jsonObject.put("code",200);
+ jsonObject.put("msg","重启任务成功");
+ } catch (SchedulerException e) {
+ e.printStackTrace();
+ jsonObject.put("code",400);
+ jsonObject.put("msg","重启任务失败");
+ }
+ return jsonObject;
+ }
+
+ /**
+ * 删除任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @return ResultMap
+ */
+ @PostMapping(path = "/deletejob")
+ @ResponseBody
+ public JSONObject deletejob(String jName, String jGroup) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ quartzService.deletejob(jName, jGroup);
+ jsonObject.put("code",200);
+ jsonObject.put("msg","删除任务成功");
+ } catch (SchedulerException e) {
+ e.printStackTrace();
+ jsonObject.put("code",400);
+ jsonObject.put("msg","删除任务失败");
+ }
+ return jsonObject;
+ }
+
+ /**
+ * 查询任务
+ *
+ * @param pageNum 页码
+ * @param pageSize 每页显示多少条数据
+ * @return Map
+ */
+ @GetMapping(path = "/queryjob")
+ @ResponseBody
+ public JSONObject queryjob(Integer pageNum, Integer pageSize) {
+ JSONObject jsonObject = new JSONObject();
+ PageInfo pageInfo = quartzService.getJobAndTriggerDetails(pageNum, pageSize);
+ Map map = new HashMap<>();
+ if (!StringUtils.isEmpty(pageInfo.getTotal())) {
+ map.put("JobAndTrigger", pageInfo);
+ map.put("number", pageInfo.getTotal());
+ jsonObject.put("code",200);
+ jsonObject.put("msg","查询任务成功");
+ jsonObject.put("data",map);
+ }else{
+ jsonObject.put("code",400);
+ jsonObject.put("msg","查询任务成功失败,没有数据");
+ }
+ return jsonObject;
+ }
+}
diff --git a/src/main/java/cn/chjyj/szwh/dto/JobAndTriggerDto.java b/src/main/java/cn/chjyj/szwh/dto/JobAndTriggerDto.java
new file mode 100644
index 0000000..8c75ef9
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/dto/JobAndTriggerDto.java
@@ -0,0 +1,100 @@
+package cn.chjyj.szwh.dto;
+
+import java.math.BigInteger;
+
+/**
+ *@Author: CJ
+ *@Date: 2021-11-2 14:15
+ */
+public class JobAndTriggerDto {
+
+ private String JOB_NAME;
+
+ private String JOB_GROUP;
+
+ private String JOB_CLASS_NAME;
+
+ private String TRIGGER_NAME;
+
+ private String TRIGGER_GROUP;
+
+ private BigInteger REPEAT_INTERVAL;
+
+ private BigInteger TIMES_TRIGGERED;
+
+ private String CRON_EXPRESSION;
+
+ private String TIME_ZONE_ID;
+
+ public String getJOB_NAME() {
+ return JOB_NAME;
+ }
+
+ public void setJOB_NAME(String JOB_NAME) {
+ this.JOB_NAME = JOB_NAME;
+ }
+
+ public String getJOB_GROUP() {
+ return JOB_GROUP;
+ }
+
+ public void setJOB_GROUP(String JOB_GROUP) {
+ this.JOB_GROUP = JOB_GROUP;
+ }
+
+ public String getJOB_CLASS_NAME() {
+ return JOB_CLASS_NAME;
+ }
+
+ public void setJOB_CLASS_NAME(String JOB_CLASS_NAME) {
+ this.JOB_CLASS_NAME = JOB_CLASS_NAME;
+ }
+
+ public String getTRIGGER_NAME() {
+ return TRIGGER_NAME;
+ }
+
+ public void setTRIGGER_NAME(String TRIGGER_NAME) {
+ this.TRIGGER_NAME = TRIGGER_NAME;
+ }
+
+ public String getTRIGGER_GROUP() {
+ return TRIGGER_GROUP;
+ }
+
+ public void setTRIGGER_GROUP(String TRIGGER_GROUP) {
+ this.TRIGGER_GROUP = TRIGGER_GROUP;
+ }
+
+ public BigInteger getREPEAT_INTERVAL() {
+ return REPEAT_INTERVAL;
+ }
+
+ public void setREPEAT_INTERVAL(BigInteger REPEAT_INTERVAL) {
+ this.REPEAT_INTERVAL = REPEAT_INTERVAL;
+ }
+
+ public BigInteger getTIMES_TRIGGERED() {
+ return TIMES_TRIGGERED;
+ }
+
+ public void setTIMES_TRIGGERED(BigInteger TIMES_TRIGGERED) {
+ this.TIMES_TRIGGERED = TIMES_TRIGGERED;
+ }
+
+ public String getCRON_EXPRESSION() {
+ return CRON_EXPRESSION;
+ }
+
+ public void setCRON_EXPRESSION(String CRON_EXPRESSION) {
+ this.CRON_EXPRESSION = CRON_EXPRESSION;
+ }
+
+ public String getTIME_ZONE_ID() {
+ return TIME_ZONE_ID;
+ }
+
+ public void setTIME_ZONE_ID(String TIME_ZONE_ID) {
+ this.TIME_ZONE_ID = TIME_ZONE_ID;
+ }
+}
diff --git a/src/main/java/cn/chjyj/szwh/job/HelloJob.java b/src/main/java/cn/chjyj/szwh/job/HelloJob.java
new file mode 100644
index 0000000..a5db62d
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/job/HelloJob.java
@@ -0,0 +1,29 @@
+package cn.chjyj.szwh.job;
+
+
+import cn.chjyj.szwh.dto.JobAndTriggerDto;
+import cn.chjyj.szwh.service.QuartzService;
+import com.github.pagehelper.PageInfo;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ *@Author: CJ
+ *@Date: 2021-11-2 11:33
+ */
+public class HelloJob implements Job {
+ private static Log log = LogFactory.getLog(HelloJob.class);
+ @Autowired
+ private QuartzService quartzService;
+
+ @Override
+ public void execute(JobExecutionContext jobExecutionContext) {
+ //QuartzService quartzService = (QuartzService) SpringUtil.getBean("quartzServiceImpl");
+ PageInfo jobAndTriggerDetails = quartzService.getJobAndTriggerDetails(1, 10);
+ log.info("任务列表总数为:" + jobAndTriggerDetails.getTotal());
+ log.info("Hello Job执行时间: " + System.currentTimeMillis());
+ }
+}
diff --git a/src/main/java/cn/chjyj/szwh/mapper/CronTriggerMapper.java b/src/main/java/cn/chjyj/szwh/mapper/CronTriggerMapper.java
new file mode 100644
index 0000000..5334773
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/mapper/CronTriggerMapper.java
@@ -0,0 +1,18 @@
+package cn.chjyj.szwh.mapper;
+
+import org.example.pojo.CronTrigger;
+import org.example.pojo.CronTriggerKey;
+
+public interface CronTriggerMapper {
+ int deleteByPrimaryKey(CronTriggerKey key);
+
+ int insert(CronTrigger record);
+
+ int insertSelective(CronTrigger record);
+
+ CronTrigger selectByPrimaryKey(CronTriggerKey key);
+
+ int updateByPrimaryKeySelective(CronTrigger record);
+
+ int updateByPrimaryKey(CronTrigger record);
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/mapper/JobDetailMapper.java b/src/main/java/cn/chjyj/szwh/mapper/JobDetailMapper.java
new file mode 100644
index 0000000..e9d680d
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/mapper/JobDetailMapper.java
@@ -0,0 +1,28 @@
+package cn.chjyj.szwh.mapper;
+
+
+import cn.chjyj.szwh.bean.JobDetail;
+import cn.chjyj.szwh.bean.JobDetailKey;
+import cn.chjyj.szwh.dto.JobAndTriggerDto;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public interface JobDetailMapper {
+ int deleteByPrimaryKey(JobDetailKey key);
+
+ int insert(JobDetail record);
+
+ int insertSelective(JobDetail record);
+
+ JobDetail selectByPrimaryKey(JobDetailKey key);
+
+ int updateByPrimaryKeySelective(JobDetail record);
+
+ int updateByPrimaryKeyWithBLOBs(JobDetail record);
+
+ int updateByPrimaryKey(JobDetail record);
+
+ List getJobAndTriggerDetails();
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/mapper/TriggerMapper.java b/src/main/java/cn/chjyj/szwh/mapper/TriggerMapper.java
new file mode 100644
index 0000000..beb9e36
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/mapper/TriggerMapper.java
@@ -0,0 +1,20 @@
+package cn.chjyj.szwh.mapper;
+
+import org.example.pojo.Trigger;
+import org.example.pojo.TriggerKey;
+
+public interface TriggerMapper {
+ int deleteByPrimaryKey(TriggerKey key);
+
+ int insert(Trigger record);
+
+ int insertSelective(Trigger record);
+
+ Trigger selectByPrimaryKey(TriggerKey key);
+
+ int updateByPrimaryKeySelective(Trigger record);
+
+ int updateByPrimaryKeyWithBLOBs(Trigger record);
+
+ int updateByPrimaryKey(Trigger record);
+}
\ No newline at end of file
diff --git a/src/main/java/cn/chjyj/szwh/service/QuartzService.java b/src/main/java/cn/chjyj/szwh/service/QuartzService.java
new file mode 100644
index 0000000..a3b9922
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/service/QuartzService.java
@@ -0,0 +1,24 @@
+package cn.chjyj.szwh.service;
+
+import cn.chjyj.szwh.dto.JobAndTriggerDto;
+import com.github.pagehelper.PageInfo;
+import org.quartz.SchedulerException;
+
+/**
+ *@Author: CJ
+ *@Date: 2021-11-2 14:20
+ */
+public interface QuartzService {
+
+ PageInfo getJobAndTriggerDetails(Integer pageNum, Integer pageSize);
+
+ void addjob(String jName, String jGroup, String tName, String tGroup, String cron);
+
+ void pausejob(String jName, String jGroupe) throws SchedulerException;
+
+ void resumejob(String jName, String jGroup) throws SchedulerException;
+
+ void rescheduleJob(String jName, String jGroup, String cron) throws SchedulerException;
+
+ void deletejob(String jName, String jGroup) throws SchedulerException;
+}
diff --git a/src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java b/src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java
index 9746424..289a3db 100644
--- a/src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java
+++ b/src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java
@@ -24,6 +24,7 @@ public class OrderServiceImpl implements OrderService {
public List getAllOrderList(int page) {
int startrs = page>0?(page-1)* ChConstant.PAGESIZE:0;
int pageSize =ChConstant.PAGESIZE;
+ //
return orderMapper.getAllOrderList(startrs,pageSize);
}
diff --git a/src/main/java/cn/chjyj/szwh/service/impl/QuartzServiceImpl.java b/src/main/java/cn/chjyj/szwh/service/impl/QuartzServiceImpl.java
new file mode 100644
index 0000000..f27cd58
--- /dev/null
+++ b/src/main/java/cn/chjyj/szwh/service/impl/QuartzServiceImpl.java
@@ -0,0 +1,98 @@
+package cn.chjyj.szwh.service.impl;
+
+import cn.chjyj.szwh.dto.JobAndTriggerDto;
+import cn.chjyj.szwh.job.HelloJob;
+import cn.chjyj.szwh.mapper.JobDetailMapper;
+import cn.chjyj.szwh.service.QuartzService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *@Author: CJ
+ *@Date: 2021-11-2 14:20
+ */
+
+@Service
+public class QuartzServiceImpl implements QuartzService {
+ private Log log = LogFactory.getLog(QuartzServiceImpl.class);
+
+ @Autowired
+ private JobDetailMapper jobDetailMapper;
+
+ @Autowired
+ private Scheduler scheduler;
+
+ @Override
+ public PageInfo getJobAndTriggerDetails(Integer pageNum, Integer pageSize) {
+ PageHelper.startPage(pageNum, pageSize);
+ List list = jobDetailMapper.getJobAndTriggerDetails();
+ PageInfo pageInfo = new PageInfo<>(list);
+ return pageInfo;
+ }
+
+ /**
+ * 新增定时任务
+ *
+ * @param jName 任务名称
+ * @param jGroup 任务组
+ * @param tName 触发器名称
+ * @param tGroup 触发器组
+ * @param cron cron表达式
+ */
+ @Override
+ public void addjob(String jName, String jGroup, String tName, String tGroup, String cron) {
+ try {
+ // 构建JobDetail
+ JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
+ .withIdentity(jName, jGroup)
+ .build();
+ // 按新的cronExpression表达式构建一个新的trigger
+ CronTrigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity(tName, tGroup)
+ .startNow()
+ .withSchedule(CronScheduleBuilder.cronSchedule(cron))
+ .build();
+ // 启动调度器
+ scheduler.start();
+ scheduler.scheduleJob(jobDetail, trigger);
+ } catch (Exception e) {
+ log.info("创建定时任务失败" + e);
+ }
+ }
+
+ @Override
+ public void pausejob(String jName, String jGroup) throws SchedulerException {
+ scheduler.pauseJob(JobKey.jobKey(jName, jGroup));
+ }
+
+ @Override
+ public void resumejob(String jName, String jGroup) throws SchedulerException {
+ scheduler.resumeJob(JobKey.jobKey(jName, jGroup));
+ }
+
+ @Override
+ public void rescheduleJob(String jName, String jGroup, String cron) throws SchedulerException {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jName, jGroup);
+ // 表达式调度构建器
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
+ CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+ // 按新的cronExpression表达式重新构建trigger
+ trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+ // 按新的trigger重新设置job执行,重启触发器
+ scheduler.rescheduleJob(triggerKey, trigger);
+ }
+
+ @Override
+ public void deletejob(String jName, String jGroup) throws SchedulerException {
+ scheduler.pauseTrigger(TriggerKey.triggerKey(jName, jGroup));
+ scheduler.unscheduleJob(TriggerKey.triggerKey(jName, jGroup));
+ scheduler.deleteJob(JobKey.jobKey(jName, jGroup));
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 64d89ff..f241934 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,4 +17,13 @@ spring.redis.port=6379
spring.redis.jedis.pool.enabled=true
# 最大连接
spring.redis.jedis.pool.max-active=8
-spring.redis.jedis.pool.max-wait=-1
\ No newline at end of file
+spring.redis.jedis.pool.max-wait=-1
+
+# 存放在数据库
+spring.quartz.job-store-type=jdbc
+# 是否等待任务执行完毕后,容器才会关闭
+spring.quartz.wait-for-jobs-to-complete-on-shutdown=true
+# 容器名称
+spring.quartz.scheduler-name=SzwhScheduler
+spring.quartz.properties=classpath:quatz.properties
+spring.quartz
\ No newline at end of file
diff --git a/src/main/resources/mapper/szwh/CronTriggerMapper.xml b/src/main/resources/mapper/szwh/CronTriggerMapper.xml
new file mode 100644
index 0000000..e7c274f
--- /dev/null
+++ b/src/main/resources/mapper/szwh/CronTriggerMapper.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+ SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, CRON_EXPRESSION, TIME_ZONE_ID
+
+
+
+ delete from qrtz_cron_triggers
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
+ insert into qrtz_cron_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP,
+ CRON_EXPRESSION, TIME_ZONE_ID)
+ values (#{schedName,jdbcType=VARCHAR}, #{triggerName,jdbcType=VARCHAR}, #{triggerGroup,jdbcType=VARCHAR},
+ #{cronExpression,jdbcType=VARCHAR}, #{timeZoneId,jdbcType=VARCHAR})
+
+
+ insert into qrtz_cron_triggers
+
+
+ SCHED_NAME,
+
+
+ TRIGGER_NAME,
+
+
+ TRIGGER_GROUP,
+
+
+ CRON_EXPRESSION,
+
+
+ TIME_ZONE_ID,
+
+
+
+
+ #{schedName,jdbcType=VARCHAR},
+
+
+ #{triggerName,jdbcType=VARCHAR},
+
+
+ #{triggerGroup,jdbcType=VARCHAR},
+
+
+ #{cronExpression,jdbcType=VARCHAR},
+
+
+ #{timeZoneId,jdbcType=VARCHAR},
+
+
+
+
+ update qrtz_cron_triggers
+
+
+ CRON_EXPRESSION = #{cronExpression,jdbcType=VARCHAR},
+
+
+ TIME_ZONE_ID = #{timeZoneId,jdbcType=VARCHAR},
+
+
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
+ update qrtz_cron_triggers
+ set CRON_EXPRESSION = #{cronExpression,jdbcType=VARCHAR},
+ TIME_ZONE_ID = #{timeZoneId,jdbcType=VARCHAR}
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/szwh/JobDetailMapper.xml b/src/main/resources/mapper/szwh/JobDetailMapper.xml
new file mode 100644
index 0000000..f0b220f
--- /dev/null
+++ b/src/main/resources/mapper/szwh/JobDetailMapper.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SCHED_NAME
+ , JOB_NAME, JOB_GROUP, DESCRIPTION, JOB_CLASS_NAME, IS_DURABLE, IS_NONCONCURRENT,
+ IS_UPDATE_DATA, REQUESTS_RECOVERY
+
+
+ JOB_DATA
+
+
+
+
+
+
+ delete
+ from qrtz_job_details
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and JOB_NAME = #{jobName,jdbcType=VARCHAR}
+ and JOB_GROUP = #{jobGroup,jdbcType=VARCHAR}
+
+
+ insert into qrtz_job_details (SCHED_NAME, JOB_NAME, JOB_GROUP,
+ DESCRIPTION, JOB_CLASS_NAME, IS_DURABLE,
+ IS_NONCONCURRENT, IS_UPDATE_DATA, REQUESTS_RECOVERY,
+ JOB_DATA)
+ values (#{schedName,jdbcType=VARCHAR}, #{jobName,jdbcType=VARCHAR}, #{jobGroup,jdbcType=VARCHAR},
+ #{description,jdbcType=VARCHAR}, #{jobClassName,jdbcType=VARCHAR}, #{isDurable,jdbcType=VARCHAR},
+ #{isNonconcurrent,jdbcType=VARCHAR}, #{isUpdateData,jdbcType=VARCHAR},
+ #{requestsRecovery,jdbcType=VARCHAR},
+ #{jobData,jdbcType=LONGVARBINARY})
+
+
+ insert into qrtz_job_details
+
+
+ SCHED_NAME,
+
+
+ JOB_NAME,
+
+
+ JOB_GROUP,
+
+
+ DESCRIPTION,
+
+
+ JOB_CLASS_NAME,
+
+
+ IS_DURABLE,
+
+
+ IS_NONCONCURRENT,
+
+
+ IS_UPDATE_DATA,
+
+
+ REQUESTS_RECOVERY,
+
+
+ JOB_DATA,
+
+
+
+
+ #{schedName,jdbcType=VARCHAR},
+
+
+ #{jobName,jdbcType=VARCHAR},
+
+
+ #{jobGroup,jdbcType=VARCHAR},
+
+
+ #{description,jdbcType=VARCHAR},
+
+
+ #{jobClassName,jdbcType=VARCHAR},
+
+
+ #{isDurable,jdbcType=VARCHAR},
+
+
+ #{isNonconcurrent,jdbcType=VARCHAR},
+
+
+ #{isUpdateData,jdbcType=VARCHAR},
+
+
+ #{requestsRecovery,jdbcType=VARCHAR},
+
+
+ #{jobData,jdbcType=LONGVARBINARY},
+
+
+
+
+ update qrtz_job_details
+
+
+ DESCRIPTION = #{description,jdbcType=VARCHAR},
+
+
+ JOB_CLASS_NAME = #{jobClassName,jdbcType=VARCHAR},
+
+
+ IS_DURABLE = #{isDurable,jdbcType=VARCHAR},
+
+
+ IS_NONCONCURRENT = #{isNonconcurrent,jdbcType=VARCHAR},
+
+
+ IS_UPDATE_DATA = #{isUpdateData,jdbcType=VARCHAR},
+
+
+ REQUESTS_RECOVERY = #{requestsRecovery,jdbcType=VARCHAR},
+
+
+ JOB_DATA = #{jobData,jdbcType=LONGVARBINARY},
+
+
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and JOB_NAME = #{jobName,jdbcType=VARCHAR}
+ and JOB_GROUP = #{jobGroup,jdbcType=VARCHAR}
+
+
+ update qrtz_job_details
+ set DESCRIPTION = #{description,jdbcType=VARCHAR},
+ JOB_CLASS_NAME = #{jobClassName,jdbcType=VARCHAR},
+ IS_DURABLE = #{isDurable,jdbcType=VARCHAR},
+ IS_NONCONCURRENT = #{isNonconcurrent,jdbcType=VARCHAR},
+ IS_UPDATE_DATA = #{isUpdateData,jdbcType=VARCHAR},
+ REQUESTS_RECOVERY = #{requestsRecovery,jdbcType=VARCHAR},
+ JOB_DATA = #{jobData,jdbcType=LONGVARBINARY}
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and JOB_NAME = #{jobName,jdbcType=VARCHAR}
+ and JOB_GROUP = #{jobGroup,jdbcType=VARCHAR}
+
+
+ update qrtz_job_details
+ set DESCRIPTION = #{description,jdbcType=VARCHAR},
+ JOB_CLASS_NAME = #{jobClassName,jdbcType=VARCHAR},
+ IS_DURABLE = #{isDurable,jdbcType=VARCHAR},
+ IS_NONCONCURRENT = #{isNonconcurrent,jdbcType=VARCHAR},
+ IS_UPDATE_DATA = #{isUpdateData,jdbcType=VARCHAR},
+ REQUESTS_RECOVERY = #{requestsRecovery,jdbcType=VARCHAR}
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and JOB_NAME = #{jobName,jdbcType=VARCHAR}
+ and JOB_GROUP = #{jobGroup,jdbcType=VARCHAR}
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/szwh/TriggerMapper.xml b/src/main/resources/mapper/szwh/TriggerMapper.xml
new file mode 100644
index 0000000..203f11f
--- /dev/null
+++ b/src/main/resources/mapper/szwh/TriggerMapper.xml
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, JOB_NAME, JOB_GROUP, DESCRIPTION, NEXT_FIRE_TIME,
+ PREV_FIRE_TIME, PRIORITY, TRIGGER_STATE, TRIGGER_TYPE, START_TIME, END_TIME, CALENDAR_NAME,
+ MISFIRE_INSTR
+
+
+ JOB_DATA
+
+
+
+ delete from qrtz_triggers
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
+ insert into qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP,
+ JOB_NAME, JOB_GROUP, DESCRIPTION,
+ NEXT_FIRE_TIME, PREV_FIRE_TIME, PRIORITY,
+ TRIGGER_STATE, TRIGGER_TYPE, START_TIME,
+ END_TIME, CALENDAR_NAME, MISFIRE_INSTR,
+ JOB_DATA)
+ values (#{schedName,jdbcType=VARCHAR}, #{triggerName,jdbcType=VARCHAR}, #{triggerGroup,jdbcType=VARCHAR},
+ #{jobName,jdbcType=VARCHAR}, #{jobGroup,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR},
+ #{nextFireTime,jdbcType=BIGINT}, #{prevFireTime,jdbcType=BIGINT}, #{priority,jdbcType=INTEGER},
+ #{triggerState,jdbcType=VARCHAR}, #{triggerType,jdbcType=VARCHAR}, #{startTime,jdbcType=BIGINT},
+ #{endTime,jdbcType=BIGINT}, #{calendarName,jdbcType=VARCHAR}, #{misfireInstr,jdbcType=SMALLINT},
+ #{jobData,jdbcType=LONGVARBINARY})
+
+
+ insert into qrtz_triggers
+
+
+ SCHED_NAME,
+
+
+ TRIGGER_NAME,
+
+
+ TRIGGER_GROUP,
+
+
+ JOB_NAME,
+
+
+ JOB_GROUP,
+
+
+ DESCRIPTION,
+
+
+ NEXT_FIRE_TIME,
+
+
+ PREV_FIRE_TIME,
+
+
+ PRIORITY,
+
+
+ TRIGGER_STATE,
+
+
+ TRIGGER_TYPE,
+
+
+ START_TIME,
+
+
+ END_TIME,
+
+
+ CALENDAR_NAME,
+
+
+ MISFIRE_INSTR,
+
+
+ JOB_DATA,
+
+
+
+
+ #{schedName,jdbcType=VARCHAR},
+
+
+ #{triggerName,jdbcType=VARCHAR},
+
+
+ #{triggerGroup,jdbcType=VARCHAR},
+
+
+ #{jobName,jdbcType=VARCHAR},
+
+
+ #{jobGroup,jdbcType=VARCHAR},
+
+
+ #{description,jdbcType=VARCHAR},
+
+
+ #{nextFireTime,jdbcType=BIGINT},
+
+
+ #{prevFireTime,jdbcType=BIGINT},
+
+
+ #{priority,jdbcType=INTEGER},
+
+
+ #{triggerState,jdbcType=VARCHAR},
+
+
+ #{triggerType,jdbcType=VARCHAR},
+
+
+ #{startTime,jdbcType=BIGINT},
+
+
+ #{endTime,jdbcType=BIGINT},
+
+
+ #{calendarName,jdbcType=VARCHAR},
+
+
+ #{misfireInstr,jdbcType=SMALLINT},
+
+
+ #{jobData,jdbcType=LONGVARBINARY},
+
+
+
+
+ update qrtz_triggers
+
+
+ JOB_NAME = #{jobName,jdbcType=VARCHAR},
+
+
+ JOB_GROUP = #{jobGroup,jdbcType=VARCHAR},
+
+
+ DESCRIPTION = #{description,jdbcType=VARCHAR},
+
+
+ NEXT_FIRE_TIME = #{nextFireTime,jdbcType=BIGINT},
+
+
+ PREV_FIRE_TIME = #{prevFireTime,jdbcType=BIGINT},
+
+
+ PRIORITY = #{priority,jdbcType=INTEGER},
+
+
+ TRIGGER_STATE = #{triggerState,jdbcType=VARCHAR},
+
+
+ TRIGGER_TYPE = #{triggerType,jdbcType=VARCHAR},
+
+
+ START_TIME = #{startTime,jdbcType=BIGINT},
+
+
+ END_TIME = #{endTime,jdbcType=BIGINT},
+
+
+ CALENDAR_NAME = #{calendarName,jdbcType=VARCHAR},
+
+
+ MISFIRE_INSTR = #{misfireInstr,jdbcType=SMALLINT},
+
+
+ JOB_DATA = #{jobData,jdbcType=LONGVARBINARY},
+
+
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
+ update qrtz_triggers
+ set JOB_NAME = #{jobName,jdbcType=VARCHAR},
+ JOB_GROUP = #{jobGroup,jdbcType=VARCHAR},
+ DESCRIPTION = #{description,jdbcType=VARCHAR},
+ NEXT_FIRE_TIME = #{nextFireTime,jdbcType=BIGINT},
+ PREV_FIRE_TIME = #{prevFireTime,jdbcType=BIGINT},
+ PRIORITY = #{priority,jdbcType=INTEGER},
+ TRIGGER_STATE = #{triggerState,jdbcType=VARCHAR},
+ TRIGGER_TYPE = #{triggerType,jdbcType=VARCHAR},
+ START_TIME = #{startTime,jdbcType=BIGINT},
+ END_TIME = #{endTime,jdbcType=BIGINT},
+ CALENDAR_NAME = #{calendarName,jdbcType=VARCHAR},
+ MISFIRE_INSTR = #{misfireInstr,jdbcType=SMALLINT},
+ JOB_DATA = #{jobData,jdbcType=LONGVARBINARY}
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
+ update qrtz_triggers
+ set JOB_NAME = #{jobName,jdbcType=VARCHAR},
+ JOB_GROUP = #{jobGroup,jdbcType=VARCHAR},
+ DESCRIPTION = #{description,jdbcType=VARCHAR},
+ NEXT_FIRE_TIME = #{nextFireTime,jdbcType=BIGINT},
+ PREV_FIRE_TIME = #{prevFireTime,jdbcType=BIGINT},
+ PRIORITY = #{priority,jdbcType=INTEGER},
+ TRIGGER_STATE = #{triggerState,jdbcType=VARCHAR},
+ TRIGGER_TYPE = #{triggerType,jdbcType=VARCHAR},
+ START_TIME = #{startTime,jdbcType=BIGINT},
+ END_TIME = #{endTime,jdbcType=BIGINT},
+ CALENDAR_NAME = #{calendarName,jdbcType=VARCHAR},
+ MISFIRE_INSTR = #{misfireInstr,jdbcType=SMALLINT}
+ where SCHED_NAME = #{schedName,jdbcType=VARCHAR}
+ and TRIGGER_NAME = #{triggerName,jdbcType=VARCHAR}
+ and TRIGGER_GROUP = #{triggerGroup,jdbcType=VARCHAR}
+
+
\ No newline at end of file
diff --git a/src/main/resources/quartz.properties b/src/main/resources/quartz.properties
new file mode 100644
index 0000000..e83029b
--- /dev/null
+++ b/src/main/resources/quartz.properties
@@ -0,0 +1,53 @@
+#主要分为scheduler、threadPool、jobStore、dataSource等部分
+
+
+org.quartz.scheduler.instanceId=AUTO
+org.quartz.scheduler.instanceName=DefaultQuartzScheduler
+#如果您希望Quartz Scheduler通过RMI作为服务器导出本身,则将“rmi.export”标志设置为true
+#在同一个配置文件中为'org.quartz.scheduler.rmi.export'和'org.quartz.scheduler.rmi.proxy'指定一个'true'值是没有意义的,如果你这样做'export'选项将被忽略
+org.quartz.scheduler.rmi.export=false
+#如果要连接(使用)远程服务的调度程序,则将“org.quartz.scheduler.rmi.proxy”标志设置为true。您还必须指定RMI注册表进程的主机和端口 - 通常是“localhost”端口1099
+org.quartz.scheduler.rmi.proxy=false
+org.quartz.scheduler.wrapJobExecutionInUserTransaction=false
+
+
+#实例化ThreadPool时,使用的线程类为SimpleThreadPool
+org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
+#threadCount和threadPriority将以setter的形式注入ThreadPool实例
+#并发个数 如果你只有几个工作每天触发几次 那么1个线程就可以,如果你有成千上万的工作,每分钟都有很多工作 那么久需要50-100之间.
+#只有1到100之间的数字是非常实用的
+org.quartz.threadPool.threadCount=5
+#优先级 默认值为5
+org.quartz.threadPool.threadPriority=5
+#可以是“true”或“false”,默认为false
+org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
+
+
+#在被认为“misfired”(失火)之前,调度程序将“tolerate(容忍)”一个Triggers(触发器)将其下一个启动时间通过的毫秒数。默认值(如果您在配置中未输入此属性)为60000(60秒)
+org.quartz.jobStore.misfireThreshold=5000
+# 默认存储在内存中,RAMJobStore快速轻便,但是当进程终止时,所有调度信息都会丢失
+#org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
+
+#持久化方式,默认存储在内存中,此处使用数据库方式
+org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
+#您需要为JobStore选择一个DriverDelegate才能使用。DriverDelegate负责执行特定数据库可能需要的任何JDBC工作
+# StdJDBCDelegate是一个使用“vanilla”JDBC代码(和SQL语句)来执行其工作的委托,用于完全符合JDBC的驱动程序
+org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+#可以将“org.quartz.jobStore.useProperties”配置参数设置为“true”(默认为false),以指示JDBCJobStore将JobDataMaps中的所有值都作为字符串,
+#因此可以作为名称 - 值对存储而不是在BLOB列中以其序列化形式存储更多复杂的对象。从长远来看,这是更安全的,因为您避免了将非String类序列化为BLOB的类版本问题
+org.quartz.jobStore.useProperties=true
+#表前缀
+org.quartz.jobStore.tablePrefix=QRTZ_
+#数据源别名,自定义
+org.quartz.jobStore.dataSource=qzDS
+
+
+#使用阿里的druid作为数据库连接池
+org.quartz.dataSource.qzDS.connectionProvider.class=org.example.config.DruidPoolingconnectionProvider
+org.quartz.dataSource.qzDS.URL=jdbc:mysql://127.0.0.1:3306/test_quartz?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC
+org.quartz.dataSource.qzDS.user=root
+org.quartz.dataSource.qzDS.password=123456
+org.quartz.dataSource.qzDS.driver=com.mysql.jdbc.Driver
+org.quartz.dataSource.qzDS.maxConnections=10
+#设置为“true”以打开群集功能。如果您有多个Quartz实例使用同一组数据库表,则此属性必须设置为“true”,否则您将遇到破坏
+#org.quartz.jobStore.isClustered=false
diff --git a/szwh.iml b/szwh.iml
index 32cb1ac..6959976 100644
--- a/szwh.iml
+++ b/szwh.iml
@@ -58,9 +58,7 @@
-
-
@@ -124,5 +122,10 @@
+
+
+
+
+
\ No newline at end of file