diff --git a/ware-quart-job/pom.xml b/ware-quart-job/pom.xml
new file mode 100644
index 0000000..e0310dc
--- /dev/null
+++ b/ware-quart-job/pom.xml
@@ -0,0 +1,96 @@
+
+
+
+ middle-ware-parent
+ com.boot.parent
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ com.quart.job
+ ware-quart-job
+ jar
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ ${spring-boot.version}
+ true
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatisplus.version}
+
+
+ com.baomidou
+ mybatis-plus-generator
+
+
+
+
+ com.baomidou
+ mybatis-plus
+ ${mybatisplus.version}
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.version}
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+ org.quartz-scheduler
+ quartz
+ ${quartz.version}
+
+
+ com.mchange
+ c3p0
+
+
+
+
+ joda-time
+ joda-time
+ ${joda.time.version}
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
\ No newline at end of file
diff --git a/ware-quart-job/src/main/java/com/quart/job/QuartJobApplication.java b/ware-quart-job/src/main/java/com/quart/job/QuartJobApplication.java
new file mode 100644
index 0000000..90eddea
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/QuartJobApplication.java
@@ -0,0 +1,11 @@
+package com.quart.job;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class QuartJobApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(QuartJobApplication.class, args);
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/config/DruidConfig.java b/ware-quart-job/src/main/java/com/quart/job/config/DruidConfig.java
new file mode 100644
index 0000000..f17fe89
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/config/DruidConfig.java
@@ -0,0 +1,133 @@
+package com.quart.job.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+
+/**
+ * Druid数据库连接池配置文件
+ */
+@Configuration
+public class DruidConfig {
+ private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);
+
+ @Value("${spring.datasource.druid.url}")
+ private String dbUrl;
+
+ @Value("${spring.datasource.druid.username}")
+ private String username;
+
+ @Value("${spring.datasource.druid.password}")
+ private String password;
+
+ @Value("${spring.datasource.druid.driverClassName}")
+ private String driverClassName;
+
+ @Value("${spring.datasource.druid.initial-size}")
+ private int initialSize;
+
+ @Value("${spring.datasource.druid.max-active}")
+ private int maxActive;
+
+ @Value("${spring.datasource.druid.min-idle}")
+ private int minIdle;
+
+ @Value("${spring.datasource.druid.max-wait}")
+ private int maxWait;
+
+ @Value("${spring.datasource.druid.pool-prepared-statements}")
+ private boolean poolPreparedStatements;
+
+ @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
+ private int maxPoolPreparedStatementPerConnectionSize;
+
+ @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
+ private int timeBetweenEvictionRunsMillis;
+
+ @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
+ private int minEvictableIdleTimeMillis;
+
+ @Value("${spring.datasource.druid.max-evictable-idle-time-millis}")
+ private int maxEvictableIdleTimeMillis;
+
+ @Value("${spring.datasource.druid.validation-query}")
+ private String validationQuery;
+
+ @Value("${spring.datasource.druid.test-while-idle}")
+ private boolean testWhileIdle;
+
+ @Value("${spring.datasource.druid.test-on-borrow}")
+ private boolean testOnBorrow;
+
+ @Value("${spring.datasource.druid.test-on-return}")
+ private boolean testOnReturn;
+
+ @Value("${spring.datasource.druid.filters}")
+ private String filters;
+
+ @Value("{spring.datasource.druid.connection-properties}")
+ private String connectionProperties;
+
+ @Bean //声明其为Bean实例
+ @Primary //在同样的DataSource中,首先使用被标注的DataSource
+ public DataSource dataSource() {
+ DruidDataSource datasource = new DruidDataSource();
+ datasource.setUrl(dbUrl);
+ datasource.setUsername(username);
+ datasource.setPassword(password);
+ datasource.setDriverClassName(driverClassName);
+ datasource.setInitialSize(initialSize);
+ datasource.setMinIdle(minIdle);
+ datasource.setMaxActive(maxActive);
+ datasource.setMaxWait(maxWait);
+ datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+ datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+ datasource.setMaxEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+ datasource.setValidationQuery(validationQuery);
+ datasource.setTestWhileIdle(testWhileIdle);
+ datasource.setTestOnBorrow(testOnBorrow);
+ datasource.setTestOnReturn(testOnReturn);
+ datasource.setPoolPreparedStatements(poolPreparedStatements);
+ datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+ try {
+ datasource.setFilters(filters);
+ } catch (Exception e) {
+ logger.error("druid configuration initialization filter", e);
+ }
+ datasource.setConnectionProperties(connectionProperties);
+ return datasource;
+ }
+ @Bean
+ public ServletRegistrationBean statViewServlet(){
+ ServletRegistrationBean srb =
+ new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
+ //设置控制台管理用户
+ srb.addInitParameter("loginUsername","root");
+ srb.addInitParameter("loginPassword","root");
+ //是否可以重置数据
+ srb.addInitParameter("resetEnable","false");
+ return srb;
+ }
+ @Bean
+ public FilterRegistrationBean statFilter(){
+ //创建过滤器
+ FilterRegistrationBean frb =
+ new FilterRegistrationBean(new WebStatFilter());
+ //设置过滤器过滤路径
+ frb.addUrlPatterns("/*");
+ //忽略过滤的形式
+ frb.addInitParameter("exclusions",
+ "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
+ return frb;
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/config/ScheduleConfig.java b/ware-quart-job/src/main/java/com/quart/job/config/ScheduleConfig.java
new file mode 100644
index 0000000..a282e9c
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/config/ScheduleConfig.java
@@ -0,0 +1,53 @@
+package com.quart.job.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import javax.sql.DataSource;
+import java.util.Properties;
+
+@Configuration
+public class ScheduleConfig {
+ @Bean
+ public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
+ // Quartz参数配置
+ Properties prop = new Properties();
+ // Schedule调度器的实体名字
+ prop.put("org.quartz.scheduler.instanceName", "HuskyScheduler");
+ // 设置为AUTO时使用,默认的实现org.quartz.scheduler.SimpleInstanceGenerator是基于主机名称和时间戳生成。
+ prop.put("org.quartz.scheduler.instanceId", "AUTO");
+ // 线程池配置
+ prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
+ prop.put("org.quartz.threadPool.threadCount", "20");
+ prop.put("org.quartz.threadPool.threadPriority", "5");
+ // JobStore配置:Scheduler在运行时用来存储相关的信息
+ // JDBCJobStore和JobStoreTX都使用关系数据库来存储Schedule相关的信息。
+ // JobStoreTX在每次执行任务后都使用commit或者rollback来提交更改。
+ prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
+ // 集群配置:如果有多个调度器实体的话则必须设置为true
+ prop.put("org.quartz.jobStore.isClustered", "true");
+ // 集群配置:检查集群下的其他调度器实体的时间间隔
+ prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
+ // 设置一个频度(毫秒),用于实例报告给集群中的其他实例
+ prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
+ // 触发器触发失败后再次触犯的时间间隔
+ prop.put("org.quartz.jobStore.misfireThreshold", "12000");
+ // 数据库表前缀
+ prop.put("org.quartz.jobStore.tablePrefix", "qrtz_");
+ // 从 LOCKS 表查询一行并对这行记录加锁的 SQL 语句
+ prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
+
+ // 定时器工厂配置
+ SchedulerFactoryBean factory = new SchedulerFactoryBean();
+ factory.setDataSource(dataSource);
+ factory.setQuartzProperties(prop);
+ factory.setSchedulerName("HuskyScheduler");
+ factory.setStartupDelay(30);
+ factory.setApplicationContextSchedulerContextKey("applicationContextKey");
+ // 可选,QuartzScheduler 启动时更新己存在的Job
+ factory.setOverwriteExistingJobs(true);
+ // 设置自动启动,默认为true
+ factory.setAutoStartup(true);
+ return factory;
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/controller/ScheduleJobWeb.java b/ware-quart-job/src/main/java/com/quart/job/controller/ScheduleJobWeb.java
new file mode 100644
index 0000000..e80af0b
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/controller/ScheduleJobWeb.java
@@ -0,0 +1,87 @@
+package com.quart.job.controller;
+
+import com.quart.job.entity.ScheduleJobBean;
+import com.quart.job.service.ScheduleJobService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import java.util.Date;
+
+@RestController
+@RequestMapping("/job")
+public class ScheduleJobWeb {
+
+ @Resource
+ private ScheduleJobService scheduleJobService ;
+
+ /**
+ * 添加定时器
+ */
+ @RequestMapping("/insertJob")
+ public ScheduleJobBean insertJob (){
+ ScheduleJobBean scheduleJobBean = new ScheduleJobBean() ;
+ scheduleJobBean.setJobId(1L);
+ scheduleJobBean.setBeanName("getTimeTask");
+ // 每分钟执行一次
+ scheduleJobBean.setCronExpression("0 0/1 * * * ?");
+ scheduleJobBean.setParams("Hello,Quart-Job");
+ scheduleJobBean.setStatus(0);
+ scheduleJobBean.setRemark("获取时间定时器");
+ scheduleJobBean.setCreateTime(new Date());
+ scheduleJobService.insert(scheduleJobBean) ;
+ return scheduleJobBean ;
+ }
+
+ /**
+ * 执行一次定时器
+ */
+ @RequestMapping("/runJob")
+ public String runJob (){
+ Long jobId = 1L ;
+ scheduleJobService.run(jobId);
+ return "success" ;
+ }
+
+ /**
+ * 更新定时器
+ */
+ @RequestMapping("/updateJob")
+ public String updateJob (){
+ Long jobId = 1L ;
+ ScheduleJobBean scheduleJobBean = scheduleJobService.selectByPrimaryKey(jobId) ;
+ scheduleJobBean.setParams("Hello,Job_Quart");
+ scheduleJobService.updateByPrimaryKeySelective(scheduleJobBean) ;
+ return "success" ;
+ }
+
+ /**
+ * 停止定时器
+ */
+ @RequestMapping("/pauseJob")
+ public String pauseJob (){
+ Long jobId = 1L ;
+ scheduleJobService.pauseJob(jobId);
+ return "success" ;
+ }
+
+ /**
+ * 恢复定时器
+ */
+ @RequestMapping("/resumeJob")
+ public String resumeJob (){
+ Long jobId = 1L ;
+ scheduleJobService.resumeJob(jobId);
+ return "success" ;
+ }
+
+ /**
+ * 删除定时器
+ */
+ @RequestMapping("/deleteJob")
+ public String deleteJob (){
+ Long jobId = 1L ;
+ scheduleJobService.delete(jobId);
+ return "success" ;
+ }
+
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobBean.java b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobBean.java
new file mode 100644
index 0000000..1773fc1
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobBean.java
@@ -0,0 +1,79 @@
+package com.quart.job.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * 定时任务配置管理
+ */
+public class ScheduleJobBean implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 任务调度参数key
+ */
+ public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY";
+
+ private Long jobId;
+ private String beanName;
+ private String params;
+ private String cronExpression;
+ private Integer status;
+ private String remark;
+ private Date createTime;
+
+ public Long getJobId() {
+ return jobId;
+ }
+
+ public void setJobId(Long jobId) {
+ this.jobId = jobId;
+ }
+
+ public String getBeanName() {
+ return beanName;
+ }
+
+ public void setBeanName(String beanName) {
+ this.beanName = beanName;
+ }
+
+ public String getParams() {
+ return params;
+ }
+
+ public void setParams(String params) {
+ this.params = params;
+ }
+
+ public String getCronExpression() {
+ return cronExpression;
+ }
+
+ public void setCronExpression(String cronExpression) {
+ this.cronExpression = cronExpression;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobExample.java b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobExample.java
new file mode 100644
index 0000000..a2f6baf
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobExample.java
@@ -0,0 +1,661 @@
+package com.quart.job.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ScheduleJobExample {
+ protected String orderByClause;
+
+ protected boolean distinct;
+
+ protected List oredCriteria;
+
+ public ScheduleJobExample() {
+ oredCriteria = new ArrayList();
+ }
+
+ public void setOrderByClause(String orderByClause) {
+ this.orderByClause = orderByClause;
+ }
+
+ public String getOrderByClause() {
+ return orderByClause;
+ }
+
+ public void setDistinct(boolean distinct) {
+ this.distinct = distinct;
+ }
+
+ public boolean isDistinct() {
+ return distinct;
+ }
+
+ public List getOredCriteria() {
+ return oredCriteria;
+ }
+
+ public void or(Criteria criteria) {
+ oredCriteria.add(criteria);
+ }
+
+ public Criteria or() {
+ Criteria criteria = createCriteriaInternal();
+ oredCriteria.add(criteria);
+ return criteria;
+ }
+
+ public Criteria createCriteria() {
+ Criteria criteria = createCriteriaInternal();
+ if (oredCriteria.size() == 0) {
+ oredCriteria.add(criteria);
+ }
+ return criteria;
+ }
+
+ protected Criteria createCriteriaInternal() {
+ Criteria criteria = new Criteria();
+ return criteria;
+ }
+
+ public void clear() {
+ oredCriteria.clear();
+ orderByClause = null;
+ distinct = false;
+ }
+
+ protected abstract static class GeneratedCriteria {
+ protected List criteria;
+
+ protected GeneratedCriteria() {
+ super();
+ criteria = new ArrayList();
+ }
+
+ public boolean isValid() {
+ return criteria.size() > 0;
+ }
+
+ public List getAllCriteria() {
+ return criteria;
+ }
+
+ public List getCriteria() {
+ return criteria;
+ }
+
+ protected void addCriterion(String condition) {
+ if (condition == null) {
+ throw new RuntimeException("Value for condition cannot be null");
+ }
+ criteria.add(new Criterion(condition));
+ }
+
+ protected void addCriterion(String condition, Object value, String property) {
+ if (value == null) {
+ throw new RuntimeException("Value for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value));
+ }
+
+ protected void addCriterion(String condition, Object value1, Object value2, String property) {
+ if (value1 == null || value2 == null) {
+ throw new RuntimeException("Between values for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value1, value2));
+ }
+
+ public Criteria andJobIdIsNull() {
+ addCriterion("job_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdIsNotNull() {
+ addCriterion("job_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdEqualTo(Long value) {
+ addCriterion("job_id =", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotEqualTo(Long value) {
+ addCriterion("job_id <>", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdGreaterThan(Long value) {
+ addCriterion("job_id >", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("job_id >=", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdLessThan(Long value) {
+ addCriterion("job_id <", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdLessThanOrEqualTo(Long value) {
+ addCriterion("job_id <=", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdIn(List values) {
+ addCriterion("job_id in", values, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotIn(List values) {
+ addCriterion("job_id not in", values, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdBetween(Long value1, Long value2) {
+ addCriterion("job_id between", value1, value2, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotBetween(Long value1, Long value2) {
+ addCriterion("job_id not between", value1, value2, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIsNull() {
+ addCriterion("bean_name is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIsNotNull() {
+ addCriterion("bean_name is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameEqualTo(String value) {
+ addCriterion("bean_name =", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotEqualTo(String value) {
+ addCriterion("bean_name <>", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameGreaterThan(String value) {
+ addCriterion("bean_name >", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameGreaterThanOrEqualTo(String value) {
+ addCriterion("bean_name >=", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLessThan(String value) {
+ addCriterion("bean_name <", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLessThanOrEqualTo(String value) {
+ addCriterion("bean_name <=", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLike(String value) {
+ addCriterion("bean_name like", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotLike(String value) {
+ addCriterion("bean_name not like", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIn(List values) {
+ addCriterion("bean_name in", values, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotIn(List values) {
+ addCriterion("bean_name not in", values, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameBetween(String value1, String value2) {
+ addCriterion("bean_name between", value1, value2, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotBetween(String value1, String value2) {
+ addCriterion("bean_name not between", value1, value2, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIsNull() {
+ addCriterion("params is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIsNotNull() {
+ addCriterion("params is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsEqualTo(String value) {
+ addCriterion("params =", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotEqualTo(String value) {
+ addCriterion("params <>", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsGreaterThan(String value) {
+ addCriterion("params >", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsGreaterThanOrEqualTo(String value) {
+ addCriterion("params >=", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLessThan(String value) {
+ addCriterion("params <", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLessThanOrEqualTo(String value) {
+ addCriterion("params <=", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLike(String value) {
+ addCriterion("params like", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotLike(String value) {
+ addCriterion("params not like", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIn(List values) {
+ addCriterion("params in", values, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotIn(List values) {
+ addCriterion("params not in", values, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsBetween(String value1, String value2) {
+ addCriterion("params between", value1, value2, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotBetween(String value1, String value2) {
+ addCriterion("params not between", value1, value2, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionIsNull() {
+ addCriterion("cron_expression is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionIsNotNull() {
+ addCriterion("cron_expression is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionEqualTo(String value) {
+ addCriterion("cron_expression =", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionNotEqualTo(String value) {
+ addCriterion("cron_expression <>", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionGreaterThan(String value) {
+ addCriterion("cron_expression >", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionGreaterThanOrEqualTo(String value) {
+ addCriterion("cron_expression >=", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionLessThan(String value) {
+ addCriterion("cron_expression <", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionLessThanOrEqualTo(String value) {
+ addCriterion("cron_expression <=", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionLike(String value) {
+ addCriterion("cron_expression like", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionNotLike(String value) {
+ addCriterion("cron_expression not like", value, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionIn(List values) {
+ addCriterion("cron_expression in", values, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionNotIn(List values) {
+ addCriterion("cron_expression not in", values, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionBetween(String value1, String value2) {
+ addCriterion("cron_expression between", value1, value2, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andCronExpressionNotBetween(String value1, String value2) {
+ addCriterion("cron_expression not between", value1, value2, "cronExpression");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNull() {
+ addCriterion("status is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNotNull() {
+ addCriterion("status is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusEqualTo(Byte value) {
+ addCriterion("status =", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotEqualTo(Byte value) {
+ addCriterion("status <>", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThan(Byte value) {
+ addCriterion("status >", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThanOrEqualTo(Byte value) {
+ addCriterion("status >=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThan(Byte value) {
+ addCriterion("status <", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThanOrEqualTo(Byte value) {
+ addCriterion("status <=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIn(List values) {
+ addCriterion("status in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotIn(List values) {
+ addCriterion("status not in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusBetween(Byte value1, Byte value2) {
+ addCriterion("status between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotBetween(Byte value1, Byte value2) {
+ addCriterion("status not between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkIsNull() {
+ addCriterion("remark is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkIsNotNull() {
+ addCriterion("remark is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkEqualTo(String value) {
+ addCriterion("remark =", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkNotEqualTo(String value) {
+ addCriterion("remark <>", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkGreaterThan(String value) {
+ addCriterion("remark >", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkGreaterThanOrEqualTo(String value) {
+ addCriterion("remark >=", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkLessThan(String value) {
+ addCriterion("remark <", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkLessThanOrEqualTo(String value) {
+ addCriterion("remark <=", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkLike(String value) {
+ addCriterion("remark like", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkNotLike(String value) {
+ addCriterion("remark not like", value, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkIn(List values) {
+ addCriterion("remark in", values, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkNotIn(List values) {
+ addCriterion("remark not in", values, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkBetween(String value1, String value2) {
+ addCriterion("remark between", value1, value2, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andRemarkNotBetween(String value1, String value2) {
+ addCriterion("remark not between", value1, value2, "remark");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNull() {
+ addCriterion("create_time is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNotNull() {
+ addCriterion("create_time is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeEqualTo(Date value) {
+ addCriterion("create_time =", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotEqualTo(Date value) {
+ addCriterion("create_time <>", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThan(Date value) {
+ addCriterion("create_time >", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+ addCriterion("create_time >=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThan(Date value) {
+ addCriterion("create_time <", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+ addCriterion("create_time <=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIn(List values) {
+ addCriterion("create_time in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotIn(List values) {
+ addCriterion("create_time not in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeBetween(Date value1, Date value2) {
+ addCriterion("create_time between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+ addCriterion("create_time not between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+ }
+
+ public static class Criteria extends GeneratedCriteria {
+
+ protected Criteria() {
+ super();
+ }
+ }
+
+ public static class Criterion {
+ private String condition;
+
+ private Object value;
+
+ private Object secondValue;
+
+ private boolean noValue;
+
+ private boolean singleValue;
+
+ private boolean betweenValue;
+
+ private boolean listValue;
+
+ private String typeHandler;
+
+ public String getCondition() {
+ return condition;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object getSecondValue() {
+ return secondValue;
+ }
+
+ public boolean isNoValue() {
+ return noValue;
+ }
+
+ public boolean isSingleValue() {
+ return singleValue;
+ }
+
+ public boolean isBetweenValue() {
+ return betweenValue;
+ }
+
+ public boolean isListValue() {
+ return listValue;
+ }
+
+ public String getTypeHandler() {
+ return typeHandler;
+ }
+
+ protected Criterion(String condition) {
+ super();
+ this.condition = condition;
+ this.typeHandler = null;
+ this.noValue = true;
+ }
+
+ protected Criterion(String condition, Object value, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.typeHandler = typeHandler;
+ if (value instanceof List>) {
+ this.listValue = true;
+ } else {
+ this.singleValue = true;
+ }
+ }
+
+ protected Criterion(String condition, Object value) {
+ this(condition, value, null);
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.secondValue = secondValue;
+ this.typeHandler = typeHandler;
+ this.betweenValue = true;
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue) {
+ this(condition, value, secondValue, null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogBean.java b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogBean.java
new file mode 100644
index 0000000..82315e1
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogBean.java
@@ -0,0 +1,85 @@
+package com.quart.job.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 定时任务日志
+ */
+public class ScheduleJobLogBean implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Long logId;
+ private Long jobId;
+ private String beanName;
+ private String params;
+ private Integer status;
+ private String error;
+ private Integer times;
+ private Date createTime;
+
+ public Long getLogId() {
+ return logId;
+ }
+
+ public void setLogId(Long logId) {
+ this.logId = logId;
+ }
+
+ public Long getJobId() {
+ return jobId;
+ }
+
+ public void setJobId(Long jobId) {
+ this.jobId = jobId;
+ }
+
+ public String getBeanName() {
+ return beanName;
+ }
+
+ public void setBeanName(String beanName) {
+ this.beanName = beanName;
+ }
+
+ public String getParams() {
+ return params;
+ }
+
+ public void setParams(String params) {
+ this.params = params;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public String getError() {
+ return error;
+ }
+
+ public void setError(String error) {
+ this.error = error;
+ }
+
+ public Integer getTimes() {
+ return times;
+ }
+
+ public void setTimes(Integer times) {
+ this.times = times;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogExample.java b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogExample.java
new file mode 100644
index 0000000..e3de4ea
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/entity/ScheduleJobLogExample.java
@@ -0,0 +1,711 @@
+package com.quart.job.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ScheduleJobLogExample {
+ protected String orderByClause;
+
+ protected boolean distinct;
+
+ protected List oredCriteria;
+
+ public ScheduleJobLogExample() {
+ oredCriteria = new ArrayList();
+ }
+
+ public void setOrderByClause(String orderByClause) {
+ this.orderByClause = orderByClause;
+ }
+
+ public String getOrderByClause() {
+ return orderByClause;
+ }
+
+ public void setDistinct(boolean distinct) {
+ this.distinct = distinct;
+ }
+
+ public boolean isDistinct() {
+ return distinct;
+ }
+
+ public List getOredCriteria() {
+ return oredCriteria;
+ }
+
+ public void or(Criteria criteria) {
+ oredCriteria.add(criteria);
+ }
+
+ public Criteria or() {
+ Criteria criteria = createCriteriaInternal();
+ oredCriteria.add(criteria);
+ return criteria;
+ }
+
+ public Criteria createCriteria() {
+ Criteria criteria = createCriteriaInternal();
+ if (oredCriteria.size() == 0) {
+ oredCriteria.add(criteria);
+ }
+ return criteria;
+ }
+
+ protected Criteria createCriteriaInternal() {
+ Criteria criteria = new Criteria();
+ return criteria;
+ }
+
+ public void clear() {
+ oredCriteria.clear();
+ orderByClause = null;
+ distinct = false;
+ }
+
+ protected abstract static class GeneratedCriteria {
+ protected List criteria;
+
+ protected GeneratedCriteria() {
+ super();
+ criteria = new ArrayList();
+ }
+
+ public boolean isValid() {
+ return criteria.size() > 0;
+ }
+
+ public List getAllCriteria() {
+ return criteria;
+ }
+
+ public List getCriteria() {
+ return criteria;
+ }
+
+ protected void addCriterion(String condition) {
+ if (condition == null) {
+ throw new RuntimeException("Value for condition cannot be null");
+ }
+ criteria.add(new Criterion(condition));
+ }
+
+ protected void addCriterion(String condition, Object value, String property) {
+ if (value == null) {
+ throw new RuntimeException("Value for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value));
+ }
+
+ protected void addCriterion(String condition, Object value1, Object value2, String property) {
+ if (value1 == null || value2 == null) {
+ throw new RuntimeException("Between values for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value1, value2));
+ }
+
+ public Criteria andLogIdIsNull() {
+ addCriterion("log_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdIsNotNull() {
+ addCriterion("log_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdEqualTo(Long value) {
+ addCriterion("log_id =", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdNotEqualTo(Long value) {
+ addCriterion("log_id <>", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdGreaterThan(Long value) {
+ addCriterion("log_id >", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("log_id >=", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdLessThan(Long value) {
+ addCriterion("log_id <", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdLessThanOrEqualTo(Long value) {
+ addCriterion("log_id <=", value, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdIn(List values) {
+ addCriterion("log_id in", values, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdNotIn(List values) {
+ addCriterion("log_id not in", values, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdBetween(Long value1, Long value2) {
+ addCriterion("log_id between", value1, value2, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andLogIdNotBetween(Long value1, Long value2) {
+ addCriterion("log_id not between", value1, value2, "logId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdIsNull() {
+ addCriterion("job_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdIsNotNull() {
+ addCriterion("job_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdEqualTo(Long value) {
+ addCriterion("job_id =", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotEqualTo(Long value) {
+ addCriterion("job_id <>", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdGreaterThan(Long value) {
+ addCriterion("job_id >", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("job_id >=", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdLessThan(Long value) {
+ addCriterion("job_id <", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdLessThanOrEqualTo(Long value) {
+ addCriterion("job_id <=", value, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdIn(List values) {
+ addCriterion("job_id in", values, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotIn(List values) {
+ addCriterion("job_id not in", values, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdBetween(Long value1, Long value2) {
+ addCriterion("job_id between", value1, value2, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andJobIdNotBetween(Long value1, Long value2) {
+ addCriterion("job_id not between", value1, value2, "jobId");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIsNull() {
+ addCriterion("bean_name is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIsNotNull() {
+ addCriterion("bean_name is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameEqualTo(String value) {
+ addCriterion("bean_name =", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotEqualTo(String value) {
+ addCriterion("bean_name <>", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameGreaterThan(String value) {
+ addCriterion("bean_name >", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameGreaterThanOrEqualTo(String value) {
+ addCriterion("bean_name >=", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLessThan(String value) {
+ addCriterion("bean_name <", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLessThanOrEqualTo(String value) {
+ addCriterion("bean_name <=", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameLike(String value) {
+ addCriterion("bean_name like", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotLike(String value) {
+ addCriterion("bean_name not like", value, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameIn(List values) {
+ addCriterion("bean_name in", values, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotIn(List values) {
+ addCriterion("bean_name not in", values, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameBetween(String value1, String value2) {
+ addCriterion("bean_name between", value1, value2, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andBeanNameNotBetween(String value1, String value2) {
+ addCriterion("bean_name not between", value1, value2, "beanName");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIsNull() {
+ addCriterion("params is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIsNotNull() {
+ addCriterion("params is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsEqualTo(String value) {
+ addCriterion("params =", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotEqualTo(String value) {
+ addCriterion("params <>", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsGreaterThan(String value) {
+ addCriterion("params >", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsGreaterThanOrEqualTo(String value) {
+ addCriterion("params >=", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLessThan(String value) {
+ addCriterion("params <", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLessThanOrEqualTo(String value) {
+ addCriterion("params <=", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsLike(String value) {
+ addCriterion("params like", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotLike(String value) {
+ addCriterion("params not like", value, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsIn(List values) {
+ addCriterion("params in", values, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotIn(List values) {
+ addCriterion("params not in", values, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsBetween(String value1, String value2) {
+ addCriterion("params between", value1, value2, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andParamsNotBetween(String value1, String value2) {
+ addCriterion("params not between", value1, value2, "params");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNull() {
+ addCriterion("status is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIsNotNull() {
+ addCriterion("status is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusEqualTo(Byte value) {
+ addCriterion("status =", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotEqualTo(Byte value) {
+ addCriterion("status <>", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThan(Byte value) {
+ addCriterion("status >", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusGreaterThanOrEqualTo(Byte value) {
+ addCriterion("status >=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThan(Byte value) {
+ addCriterion("status <", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusLessThanOrEqualTo(Byte value) {
+ addCriterion("status <=", value, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusIn(List values) {
+ addCriterion("status in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotIn(List values) {
+ addCriterion("status not in", values, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusBetween(Byte value1, Byte value2) {
+ addCriterion("status between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andStatusNotBetween(Byte value1, Byte value2) {
+ addCriterion("status not between", value1, value2, "status");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorIsNull() {
+ addCriterion("error is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorIsNotNull() {
+ addCriterion("error is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorEqualTo(String value) {
+ addCriterion("error =", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorNotEqualTo(String value) {
+ addCriterion("error <>", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorGreaterThan(String value) {
+ addCriterion("error >", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorGreaterThanOrEqualTo(String value) {
+ addCriterion("error >=", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorLessThan(String value) {
+ addCriterion("error <", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorLessThanOrEqualTo(String value) {
+ addCriterion("error <=", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorLike(String value) {
+ addCriterion("error like", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorNotLike(String value) {
+ addCriterion("error not like", value, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorIn(List values) {
+ addCriterion("error in", values, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorNotIn(List values) {
+ addCriterion("error not in", values, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorBetween(String value1, String value2) {
+ addCriterion("error between", value1, value2, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andErrorNotBetween(String value1, String value2) {
+ addCriterion("error not between", value1, value2, "error");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesIsNull() {
+ addCriterion("times is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesIsNotNull() {
+ addCriterion("times is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesEqualTo(Integer value) {
+ addCriterion("times =", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesNotEqualTo(Integer value) {
+ addCriterion("times <>", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesGreaterThan(Integer value) {
+ addCriterion("times >", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesGreaterThanOrEqualTo(Integer value) {
+ addCriterion("times >=", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesLessThan(Integer value) {
+ addCriterion("times <", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesLessThanOrEqualTo(Integer value) {
+ addCriterion("times <=", value, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesIn(List values) {
+ addCriterion("times in", values, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesNotIn(List values) {
+ addCriterion("times not in", values, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesBetween(Integer value1, Integer value2) {
+ addCriterion("times between", value1, value2, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andTimesNotBetween(Integer value1, Integer value2) {
+ addCriterion("times not between", value1, value2, "times");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNull() {
+ addCriterion("create_time is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIsNotNull() {
+ addCriterion("create_time is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeEqualTo(Date value) {
+ addCriterion("create_time =", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotEqualTo(Date value) {
+ addCriterion("create_time <>", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThan(Date value) {
+ addCriterion("create_time >", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+ addCriterion("create_time >=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThan(Date value) {
+ addCriterion("create_time <", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+ addCriterion("create_time <=", value, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeIn(List values) {
+ addCriterion("create_time in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotIn(List values) {
+ addCriterion("create_time not in", values, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeBetween(Date value1, Date value2) {
+ addCriterion("create_time between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+
+ public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+ addCriterion("create_time not between", value1, value2, "createTime");
+ return (Criteria) this;
+ }
+ }
+
+ public static class Criteria extends GeneratedCriteria {
+
+ protected Criteria() {
+ super();
+ }
+ }
+
+ public static class Criterion {
+ private String condition;
+
+ private Object value;
+
+ private Object secondValue;
+
+ private boolean noValue;
+
+ private boolean singleValue;
+
+ private boolean betweenValue;
+
+ private boolean listValue;
+
+ private String typeHandler;
+
+ public String getCondition() {
+ return condition;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object getSecondValue() {
+ return secondValue;
+ }
+
+ public boolean isNoValue() {
+ return noValue;
+ }
+
+ public boolean isSingleValue() {
+ return singleValue;
+ }
+
+ public boolean isBetweenValue() {
+ return betweenValue;
+ }
+
+ public boolean isListValue() {
+ return listValue;
+ }
+
+ public String getTypeHandler() {
+ return typeHandler;
+ }
+
+ protected Criterion(String condition) {
+ super();
+ this.condition = condition;
+ this.typeHandler = null;
+ this.noValue = true;
+ }
+
+ protected Criterion(String condition, Object value, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.typeHandler = typeHandler;
+ if (value instanceof List>) {
+ this.listValue = true;
+ } else {
+ this.singleValue = true;
+ }
+ }
+
+ protected Criterion(String condition, Object value) {
+ this(condition, value, null);
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.secondValue = secondValue;
+ this.typeHandler = typeHandler;
+ this.betweenValue = true;
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue) {
+ this(condition, value, secondValue, null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobLogMapper.java b/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobLogMapper.java
new file mode 100644
index 0000000..29800f1
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobLogMapper.java
@@ -0,0 +1,32 @@
+package com.quart.job.mapper;
+
+import com.quart.job.entity.ScheduleJobLogBean;
+import com.quart.job.entity.ScheduleJobLogExample;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+@Mapper
+public interface ScheduleJobLogMapper {
+ int countByExample(ScheduleJobLogExample example);
+
+ int deleteByExample(ScheduleJobLogExample example);
+
+ int deleteByPrimaryKey(Long logId);
+
+ int insert(ScheduleJobLogBean record);
+
+ int insertSelective(ScheduleJobLogBean record);
+
+ List selectByExample(ScheduleJobLogExample example);
+
+ ScheduleJobLogBean selectByPrimaryKey(Long logId);
+
+ int updateByExampleSelective(@Param("record") ScheduleJobLogBean record, @Param("example") ScheduleJobLogExample example);
+
+ int updateByExample(@Param("record") ScheduleJobLogBean record, @Param("example") ScheduleJobLogExample example);
+
+ int updateByPrimaryKeySelective(ScheduleJobLogBean record);
+
+ int updateByPrimaryKey(ScheduleJobLogBean record);
+}
\ No newline at end of file
diff --git a/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobMapper.java b/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobMapper.java
new file mode 100644
index 0000000..b357e30
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/mapper/ScheduleJobMapper.java
@@ -0,0 +1,33 @@
+package com.quart.job.mapper;
+
+import com.quart.job.entity.ScheduleJobBean;
+import com.quart.job.entity.ScheduleJobExample;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ScheduleJobMapper {
+ int countByExample(ScheduleJobExample example);
+
+ int deleteByExample(ScheduleJobExample example);
+
+ int deleteByPrimaryKey(Long jobId);
+
+ int insert(ScheduleJobBean record);
+
+ int insertSelective(ScheduleJobBean record);
+
+ List selectByExample(ScheduleJobExample example);
+
+ ScheduleJobBean selectByPrimaryKey(Long jobId);
+
+ int updateByExampleSelective(@Param("record") ScheduleJobBean record, @Param("example") ScheduleJobExample example);
+
+ int updateByExample(@Param("record") ScheduleJobBean record, @Param("example") ScheduleJobExample example);
+
+ int updateByPrimaryKeySelective(ScheduleJobBean record);
+
+ int updateByPrimaryKey(ScheduleJobBean record);
+}
\ No newline at end of file
diff --git a/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobLogService.java b/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobLogService.java
new file mode 100644
index 0000000..378dfef
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobLogService.java
@@ -0,0 +1,8 @@
+package com.quart.job.service;
+
+import com.quart.job.entity.ScheduleJobLogBean;
+
+public interface ScheduleJobLogService {
+ // 保存
+ int insert(ScheduleJobLogBean record);
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobService.java b/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobService.java
new file mode 100644
index 0000000..d3f7605
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/service/ScheduleJobService.java
@@ -0,0 +1,24 @@
+package com.quart.job.service;
+
+import com.quart.job.entity.ScheduleJobBean;
+import com.quart.job.entity.ScheduleJobExample;
+import java.util.List;
+
+public interface ScheduleJobService {
+ // 主键查询
+ ScheduleJobBean selectByPrimaryKey(Long jobId);
+ // 列表查询
+ List selectByExample(ScheduleJobExample example);
+ // 保存
+ int insert(ScheduleJobBean record);
+ // 更新
+ int updateByPrimaryKeySelective(ScheduleJobBean record);
+ // 停止
+ void pauseJob (Long jobId) ;
+ // 恢复
+ void resumeJob (Long jobId) ;
+ // 执行
+ void run (Long jobId) ;
+ // 删除
+ void delete (Long jobId) ;
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobLogServiceImpl.java b/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobLogServiceImpl.java
new file mode 100644
index 0000000..745114b
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobLogServiceImpl.java
@@ -0,0 +1,19 @@
+package com.quart.job.service.impl;
+
+import com.quart.job.entity.ScheduleJobLogBean;
+import com.quart.job.mapper.ScheduleJobLogMapper;
+import com.quart.job.service.ScheduleJobLogService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+
+@Service("scheduleJobLogService")
+public class ScheduleJobLogServiceImpl implements ScheduleJobLogService {
+
+ @Resource
+ private ScheduleJobLogMapper scheduleJobLogMapper ;
+
+ @Override
+ public int insert(ScheduleJobLogBean record) {
+ return scheduleJobLogMapper.insert(record);
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobServiceImpl.java b/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobServiceImpl.java
new file mode 100644
index 0000000..a6f718e
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/service/impl/ScheduleJobServiceImpl.java
@@ -0,0 +1,96 @@
+package com.quart.job.service.impl;
+
+import com.quart.job.entity.ScheduleJobBean;
+import com.quart.job.entity.ScheduleJobExample;
+import com.quart.job.mapper.ScheduleJobMapper;
+import com.quart.job.service.ScheduleJobService;
+import com.quart.job.utils.ScheduleUtil;
+import org.quartz.CronTrigger;
+import org.quartz.Scheduler;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class ScheduleJobServiceImpl implements ScheduleJobService {
+
+ @Resource
+ private Scheduler scheduler ;
+ @Resource
+ private ScheduleJobMapper scheduleJobMapper ;
+
+ /**
+ * 定时器初始化
+ */
+ @PostConstruct
+ public void init (){
+ ScheduleJobExample example = new ScheduleJobExample() ;
+ List scheduleJobBeanList = scheduleJobMapper.selectByExample(example) ;
+ for (ScheduleJobBean scheduleJobBean : scheduleJobBeanList) {
+ CronTrigger cronTrigger = ScheduleUtil.getCronTrigger(scheduler,scheduleJobBean.getJobId()) ;
+ if (cronTrigger == null){
+ ScheduleUtil.createJob(scheduler,scheduleJobBean);
+ } else {
+ ScheduleUtil.updateJob(scheduler,scheduleJobBean);
+ }
+ }
+ }
+
+ @Override
+ public ScheduleJobBean selectByPrimaryKey(Long jobId) {
+ return scheduleJobMapper.selectByPrimaryKey(jobId);
+ }
+
+ @Override
+ public List selectByExample(ScheduleJobExample example) {
+ return scheduleJobMapper.selectByExample(example);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int insert(ScheduleJobBean record) {
+ ScheduleUtil.createJob(scheduler,record);
+ return scheduleJobMapper.insert(record);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int updateByPrimaryKeySelective(ScheduleJobBean record) {
+ ScheduleUtil.updateJob(scheduler,record);
+ return scheduleJobMapper.updateByPrimaryKeySelective(record);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void pauseJob(Long jobId) {
+ ScheduleJobBean scheduleJobBean = scheduleJobMapper.selectByPrimaryKey(jobId) ;
+ ScheduleUtil.pauseJob(scheduler,jobId);
+ scheduleJobBean.setStatus(1);
+ scheduleJobMapper.updateByPrimaryKeySelective(scheduleJobBean) ;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void resumeJob(Long jobId) {
+ ScheduleJobBean scheduleJobBean = scheduleJobMapper.selectByPrimaryKey(jobId) ;
+ ScheduleUtil.resumeJob(scheduler,jobId);
+ scheduleJobBean.setStatus(0);
+ scheduleJobMapper.updateByPrimaryKeySelective(scheduleJobBean) ;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void run(Long jobId) {
+ ScheduleJobBean scheduleJobBean = scheduleJobMapper.selectByPrimaryKey(jobId) ;
+ ScheduleUtil.run(scheduler,scheduleJobBean);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void delete(Long jobId) {
+ ScheduleUtil.deleteJob(scheduler, jobId);
+ scheduleJobMapper.deleteByPrimaryKey(jobId) ;
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/task/GetTimeTask.java b/ware-quart-job/src/main/java/com/quart/job/task/GetTimeTask.java
new file mode 100644
index 0000000..2f000f8
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/task/GetTimeTask.java
@@ -0,0 +1,22 @@
+package com.quart.job.task;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Component("getTimeTask")
+public class GetTimeTask implements TaskService {
+
+ private static final Logger LOG = LoggerFactory.getLogger(GetTimeTask.class.getName()) ;
+
+ private static final SimpleDateFormat format =
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
+
+ @Override
+ public void run(String params) {
+ LOG.info("Params === >> " + params);
+ LOG.info("当前时间::::"+format.format(new Date()));
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/task/TaskService.java b/ware-quart-job/src/main/java/com/quart/job/task/TaskService.java
new file mode 100644
index 0000000..3d5deed
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/task/TaskService.java
@@ -0,0 +1,5 @@
+package com.quart.job.task;
+
+public interface TaskService {
+ void run(String params);
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/utils/ScheduleUtil.java b/ware-quart-job/src/main/java/com/quart/job/utils/ScheduleUtil.java
new file mode 100644
index 0000000..1911e3d
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/utils/ScheduleUtil.java
@@ -0,0 +1,131 @@
+package com.quart.job.utils;
+
+import com.quart.job.entity.ScheduleJobBean;
+import org.quartz.*;
+
+/**
+ * 定时器工具类
+ */
+public class ScheduleUtil {
+
+ private ScheduleUtil (){}
+
+ private static final String SCHEDULE_NAME = "HUSKY_" ;
+
+ /**
+ * 触发器 KEY
+ */
+ public static TriggerKey getTriggerKey(Long jobId){
+ return TriggerKey.triggerKey(SCHEDULE_NAME+jobId) ;
+ }
+
+ /**
+ * 定时器 Key
+ */
+ public static JobKey getJobKey (Long jobId){
+ return JobKey.jobKey(SCHEDULE_NAME+jobId) ;
+ }
+
+ /**
+ * 表达式触发器
+ */
+ public static CronTrigger getCronTrigger (Scheduler scheduler,Long jobId){
+ try {
+ return (CronTrigger)scheduler.getTrigger(getTriggerKey(jobId)) ;
+ } catch (SchedulerException e){
+ throw new RuntimeException("getCronTrigger Fail",e) ;
+ }
+ }
+
+ /**
+ * 创建定时器
+ */
+ public static void createJob (Scheduler scheduler, ScheduleJobBean scheduleJob){
+ try {
+ // 构建定时器
+ JobDetail jobDetail = JobBuilder.newJob(TaskJobLog.class).withIdentity(getJobKey(scheduleJob.getJobId())).build() ;
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
+ .cronSchedule(scheduleJob.getCronExpression())
+ .withMisfireHandlingInstructionDoNothing() ;
+ CronTrigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity(getTriggerKey(scheduleJob.getJobId()))
+ .withSchedule(scheduleBuilder).build() ;
+ jobDetail.getJobDataMap().put(ScheduleJobBean.JOB_PARAM_KEY,scheduleJob);
+ scheduler.scheduleJob(jobDetail,trigger) ;
+ // 如果该定时器处于暂停状态
+ if (scheduleJob.getStatus() == 1){
+ pauseJob(scheduler,scheduleJob.getJobId()) ;
+ }
+ } catch (SchedulerException e){
+ throw new RuntimeException("createJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 更新定时任务
+ */
+ public static void updateJob(Scheduler scheduler, ScheduleJobBean scheduleJob) {
+ try {
+ // 构建定时器
+ TriggerKey triggerKey = getTriggerKey(scheduleJob.getJobId());
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
+ .withMisfireHandlingInstructionDoNothing();
+ CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getJobId());
+ trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+ trigger.getJobDataMap().put(ScheduleJobBean.JOB_PARAM_KEY, scheduleJob);
+ scheduler.rescheduleJob(triggerKey, trigger);
+ // 如果该定时器处于暂停状态
+ if(scheduleJob.getStatus() == 1){
+ pauseJob(scheduler, scheduleJob.getJobId());
+ }
+ } catch (SchedulerException e) {
+ throw new RuntimeException("updateJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 停止定时器
+ */
+ public static void pauseJob (Scheduler scheduler,Long jobId){
+ try {
+ scheduler.pauseJob(getJobKey(jobId));
+ } catch (SchedulerException e){
+ throw new RuntimeException("pauseJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 恢复定时器
+ */
+ public static void resumeJob (Scheduler scheduler,Long jobId){
+ try {
+ scheduler.resumeJob(getJobKey(jobId));
+ } catch (SchedulerException e){
+ throw new RuntimeException("resumeJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 删除定时器
+ */
+ public static void deleteJob (Scheduler scheduler,Long jobId){
+ try {
+ scheduler.deleteJob(getJobKey(jobId));
+ } catch (SchedulerException e){
+ throw new RuntimeException("deleteJob Fail",e) ;
+ }
+ }
+
+ /**
+ * 执行定时器
+ */
+ public static void run (Scheduler scheduler, ScheduleJobBean scheduleJob){
+ try {
+ JobDataMap dataMap = new JobDataMap() ;
+ dataMap.put(ScheduleJobBean.JOB_PARAM_KEY,scheduleJob);
+ scheduler.triggerJob(getJobKey(scheduleJob.getJobId()),dataMap);
+ } catch (SchedulerException e){
+ throw new RuntimeException("run Fail",e) ;
+ }
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/utils/SpringContextUtil.java b/ware-quart-job/src/main/java/com/quart/job/utils/SpringContextUtil.java
new file mode 100644
index 0000000..2216e16
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/utils/SpringContextUtil.java
@@ -0,0 +1,37 @@
+package com.quart.job.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringContextUtil implements ApplicationContextAware {
+ public static ApplicationContext applicationContext;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext)
+ throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ public static Object getBean(String name) {
+ return applicationContext.getBean(name);
+ }
+
+ public static T getBean(String name, Class requiredType) {
+ return applicationContext.getBean(name, requiredType);
+ }
+
+ public static boolean containsBean(String name) {
+ return applicationContext.containsBean(name);
+ }
+
+ public static boolean isSingleton(String name) {
+ return applicationContext.isSingleton(name);
+ }
+
+ public static Class extends Object> getType(String name) {
+ return applicationContext.getType(name);
+ }
+}
diff --git a/ware-quart-job/src/main/java/com/quart/job/utils/TaskJobLog.java b/ware-quart-job/src/main/java/com/quart/job/utils/TaskJobLog.java
new file mode 100644
index 0000000..98f8ec0
--- /dev/null
+++ b/ware-quart-job/src/main/java/com/quart/job/utils/TaskJobLog.java
@@ -0,0 +1,49 @@
+package com.quart.job.utils;
+
+import com.quart.job.entity.ScheduleJobBean;
+import com.quart.job.entity.ScheduleJobLogBean;
+import com.quart.job.service.ScheduleJobLogService;
+import org.quartz.JobExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import java.lang.reflect.Method;
+import java.util.Date;
+/**
+ * 定时器执行日志记录
+ */
+public class TaskJobLog extends QuartzJobBean {
+
+ private static final Logger LOG = LoggerFactory.getLogger(TaskJobLog.class) ;
+
+ @Override
+ protected void executeInternal(JobExecutionContext context) {
+ ScheduleJobBean jobBean = (ScheduleJobBean)context.getMergedJobDataMap().get(ScheduleJobBean.JOB_PARAM_KEY) ;
+ ScheduleJobLogService scheduleJobLogService = (ScheduleJobLogService)SpringContextUtil.getBean("scheduleJobLogService") ;
+ // 定时器日志记录
+ ScheduleJobLogBean logBean = new ScheduleJobLogBean () ;
+ logBean.setJobId(jobBean.getJobId());
+ logBean.setBeanName(jobBean.getBeanName());
+ logBean.setParams(jobBean.getParams());
+ logBean.setCreateTime(new Date());
+ long beginTime = System.currentTimeMillis() ;
+ try {
+ // 加载并执行定时器的 run 方法
+ Object target = SpringContextUtil.getBean(jobBean.getBeanName());
+ Method method = target.getClass().getDeclaredMethod("run", String.class);
+ method.invoke(target, jobBean.getParams());
+ long executeTime = System.currentTimeMillis() - beginTime;
+ logBean.setTimes((int)executeTime);
+ logBean.setStatus(0);
+ LOG.info("定时器 === >> "+jobBean.getJobId()+"执行成功,耗时 === >> " + executeTime);
+ } catch (Exception e){
+ // 异常信息
+ long executeTime = System.currentTimeMillis() - beginTime;
+ logBean.setTimes((int)executeTime);
+ logBean.setStatus(1);
+ logBean.setError(e.getMessage());
+ } finally {
+ scheduleJobLogService.insert(logBean) ;
+ }
+ }
+}
diff --git a/ware-quart-job/src/main/resources/application-dev.yml b/ware-quart-job/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..b73c666
--- /dev/null
+++ b/ware-quart-job/src/main/resources/application-dev.yml
@@ -0,0 +1,28 @@
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/quart_job?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
+ username: root
+ password: 123
+ initial-size: 10
+ max-active: 100
+ min-idle: 10
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ time-between-eviction-runs-millis: 60000
+ min-evictable-idle-time-millis: 300000
+ max-evictable-idle-time-millis: 60000
+ validation-query: SELECT 1 FROM DUAL
+ # validation-query-timeout: 5000
+ test-on-borrow: false
+ test-on-return: false
+ test-while-idle: true
+ connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+ #filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)
+ filters: stat,wall
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
\ No newline at end of file
diff --git a/ware-quart-job/src/main/resources/application.yml b/ware-quart-job/src/main/resources/application.yml
new file mode 100644
index 0000000..bc44132
--- /dev/null
+++ b/ware-quart-job/src/main/resources/application.yml
@@ -0,0 +1,38 @@
+server:
+ tomcat:
+ uri-encoding: UTF-8
+ max-threads: 1000
+ min-spare-threads: 30
+ port: 7001
+ connection-timeout: 5000ms
+ servlet:
+ context-path: /quart-job
+
+spring:
+ application:
+ name: ware-quart-job
+ profiles:
+ active: dev
+ mvc:
+ throw-exception-if-no-handler-found: true
+
+# mybatis
+mybatis-plus:
+ mapper-locations: classpath*:/mybatis/mapper/**/*.xml
+ #实体扫描,多个package用逗号或者分号分隔
+ typeAliasesPackage: com.quart.job.*.entity
+ global-config:
+ #数据库相关配置
+ db-config:
+ id-type: AUTO
+ field-strategy: NOT_NULL
+ column-underline: true
+ logic-delete-value: -1
+ logic-not-delete-value: 0
+ banner: false
+ #原生配置
+ configuration:
+ map-underscore-to-camel-case: true
+ cache-enabled: false
+ call-setters-on-nulls: true
+ jdbc-type-for-null: 'null'
\ No newline at end of file
diff --git a/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobLogMapper.xml b/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobLogMapper.xml
new file mode 100644
index 0000000..67495f6
--- /dev/null
+++ b/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobLogMapper.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+ log_id, job_id, bean_name, params, status, error, times, create_time
+
+
+
+
+ delete from schedule_job_log
+ where log_id = #{logId,jdbcType=BIGINT}
+
+
+ delete from schedule_job_log
+
+
+
+
+
+ insert into schedule_job_log (log_id, job_id, bean_name,
+ params, status, error,
+ times, create_time)
+ values (#{logId,jdbcType=BIGINT}, #{jobId,jdbcType=BIGINT}, #{beanName,jdbcType=VARCHAR},
+ #{params,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT}, #{error,jdbcType=VARCHAR},
+ #{times,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})
+
+
+ insert into schedule_job_log
+
+
+ log_id,
+
+
+ job_id,
+
+
+ bean_name,
+
+
+ params,
+
+
+ status,
+
+
+ error,
+
+
+ times,
+
+
+ create_time,
+
+
+
+
+ #{logId,jdbcType=BIGINT},
+
+
+ #{jobId,jdbcType=BIGINT},
+
+
+ #{beanName,jdbcType=VARCHAR},
+
+
+ #{params,jdbcType=VARCHAR},
+
+
+ #{status,jdbcType=TINYINT},
+
+
+ #{error,jdbcType=VARCHAR},
+
+
+ #{times,jdbcType=INTEGER},
+
+
+ #{createTime,jdbcType=TIMESTAMP},
+
+
+
+
+
+ update schedule_job_log
+
+
+ log_id = #{record.logId,jdbcType=BIGINT},
+
+
+ job_id = #{record.jobId,jdbcType=BIGINT},
+
+
+ bean_name = #{record.beanName,jdbcType=VARCHAR},
+
+
+ params = #{record.params,jdbcType=VARCHAR},
+
+
+ status = #{record.status,jdbcType=TINYINT},
+
+
+ error = #{record.error,jdbcType=VARCHAR},
+
+
+ times = #{record.times,jdbcType=INTEGER},
+
+
+ create_time = #{record.createTime,jdbcType=TIMESTAMP},
+
+
+
+
+
+
+
+ update schedule_job_log
+ set log_id = #{record.logId,jdbcType=BIGINT},
+ job_id = #{record.jobId,jdbcType=BIGINT},
+ bean_name = #{record.beanName,jdbcType=VARCHAR},
+ params = #{record.params,jdbcType=VARCHAR},
+ status = #{record.status,jdbcType=TINYINT},
+ error = #{record.error,jdbcType=VARCHAR},
+ times = #{record.times,jdbcType=INTEGER},
+ create_time = #{record.createTime,jdbcType=TIMESTAMP}
+
+
+
+
+
+ update schedule_job_log
+
+
+ job_id = #{jobId,jdbcType=BIGINT},
+
+
+ bean_name = #{beanName,jdbcType=VARCHAR},
+
+
+ params = #{params,jdbcType=VARCHAR},
+
+
+ status = #{status,jdbcType=TINYINT},
+
+
+ error = #{error,jdbcType=VARCHAR},
+
+
+ times = #{times,jdbcType=INTEGER},
+
+
+ create_time = #{createTime,jdbcType=TIMESTAMP},
+
+
+ where log_id = #{logId,jdbcType=BIGINT}
+
+
+ update schedule_job_log
+ set job_id = #{jobId,jdbcType=BIGINT},
+ bean_name = #{beanName,jdbcType=VARCHAR},
+ params = #{params,jdbcType=VARCHAR},
+ status = #{status,jdbcType=TINYINT},
+ error = #{error,jdbcType=VARCHAR},
+ times = #{times,jdbcType=INTEGER},
+ create_time = #{createTime,jdbcType=TIMESTAMP}
+ where log_id = #{logId,jdbcType=BIGINT}
+
+
\ No newline at end of file
diff --git a/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobMapper.xml b/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobMapper.xml
new file mode 100644
index 0000000..d1d4a01
--- /dev/null
+++ b/ware-quart-job/src/main/resources/mybatis/mapper/ScheduleJobMapper.xml
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+ job_id, bean_name, params, cron_expression, status, remark, create_time
+
+
+
+
+ delete from schedule_job
+ where job_id = #{jobId,jdbcType=BIGINT}
+
+
+ delete from schedule_job
+
+
+
+
+
+ insert into schedule_job (job_id, bean_name, params,
+ cron_expression, status, remark,
+ create_time)
+ values (#{jobId,jdbcType=BIGINT}, #{beanName,jdbcType=VARCHAR}, #{params,jdbcType=VARCHAR},
+ #{cronExpression,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT}, #{remark,jdbcType=VARCHAR},
+ #{createTime,jdbcType=TIMESTAMP})
+
+
+ insert into schedule_job
+
+
+ job_id,
+
+
+ bean_name,
+
+
+ params,
+
+
+ cron_expression,
+
+
+ status,
+
+
+ remark,
+
+
+ create_time,
+
+
+
+
+ #{jobId,jdbcType=BIGINT},
+
+
+ #{beanName,jdbcType=VARCHAR},
+
+
+ #{params,jdbcType=VARCHAR},
+
+
+ #{cronExpression,jdbcType=VARCHAR},
+
+
+ #{status,jdbcType=TINYINT},
+
+
+ #{remark,jdbcType=VARCHAR},
+
+
+ #{createTime,jdbcType=TIMESTAMP},
+
+
+
+
+
+ update schedule_job
+
+
+ job_id = #{record.jobId,jdbcType=BIGINT},
+
+
+ bean_name = #{record.beanName,jdbcType=VARCHAR},
+
+
+ params = #{record.params,jdbcType=VARCHAR},
+
+
+ cron_expression = #{record.cronExpression,jdbcType=VARCHAR},
+
+
+ status = #{record.status,jdbcType=TINYINT},
+
+
+ remark = #{record.remark,jdbcType=VARCHAR},
+
+
+ create_time = #{record.createTime,jdbcType=TIMESTAMP},
+
+
+
+
+
+
+
+ update schedule_job
+ set job_id = #{record.jobId,jdbcType=BIGINT},
+ bean_name = #{record.beanName,jdbcType=VARCHAR},
+ params = #{record.params,jdbcType=VARCHAR},
+ cron_expression = #{record.cronExpression,jdbcType=VARCHAR},
+ status = #{record.status,jdbcType=TINYINT},
+ remark = #{record.remark,jdbcType=VARCHAR},
+ create_time = #{record.createTime,jdbcType=TIMESTAMP}
+
+
+
+
+
+ update schedule_job
+
+
+ bean_name = #{beanName,jdbcType=VARCHAR},
+
+
+ params = #{params,jdbcType=VARCHAR},
+
+
+ cron_expression = #{cronExpression,jdbcType=VARCHAR},
+
+
+ status = #{status,jdbcType=TINYINT},
+
+
+ remark = #{remark,jdbcType=VARCHAR},
+
+
+ create_time = #{createTime,jdbcType=TIMESTAMP},
+
+
+ where job_id = #{jobId,jdbcType=BIGINT}
+
+
+ update schedule_job
+ set bean_name = #{beanName,jdbcType=VARCHAR},
+ params = #{params,jdbcType=VARCHAR},
+ cron_expression = #{cronExpression,jdbcType=VARCHAR},
+ status = #{status,jdbcType=TINYINT},
+ remark = #{remark,jdbcType=VARCHAR},
+ create_time = #{createTime,jdbcType=TIMESTAMP}
+ where job_id = #{jobId,jdbcType=BIGINT}
+
+
\ No newline at end of file
diff --git a/ware-quart-job/src/main/resources/mybatis/mybatis.cfg.xml b/ware-quart-job/src/main/resources/mybatis/mybatis.cfg.xml
new file mode 100644
index 0000000..26bdc98
--- /dev/null
+++ b/ware-quart-job/src/main/resources/mybatis/mybatis.cfg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ware-quart-job/src/main/resources/quart-job.sql b/ware-quart-job/src/main/resources/quart-job.sql
new file mode 100644
index 0000000..fa9d9ae
--- /dev/null
+++ b/ware-quart-job/src/main/resources/quart-job.sql
@@ -0,0 +1,185 @@
+-- 自定义定时任务表
+-- 定时任务配置表
+CREATE TABLE `schedule_job` (
+ `job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务id',
+ `bean_name` varchar(200) DEFAULT NULL COMMENT 'spring bean名称',
+ `params` varchar(2000) DEFAULT NULL COMMENT '参数',
+ `cron_expression` varchar(100) DEFAULT NULL COMMENT 'cron表达式',
+ `status` tinyint(4) DEFAULT NULL COMMENT '任务状态 0:正常 1:暂停',
+ `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ PRIMARY KEY (`job_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务';
+
+-- 定时任务日志
+CREATE TABLE `schedule_job_log` (
+ `log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志id',
+ `job_id` bigint(20) NOT NULL COMMENT '任务id',
+ `bean_name` varchar(200) DEFAULT NULL COMMENT 'spring bean名称',
+ `params` varchar(2000) DEFAULT NULL COMMENT '参数',
+ `status` tinyint(4) NOT NULL COMMENT '任务状态 0:成功 1:失败',
+ `error` varchar(2000) DEFAULT NULL COMMENT '失败信息',
+ `times` int(11) NOT NULL COMMENT '耗时(单位:毫秒)',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ PRIMARY KEY (`log_id`),
+ KEY `job_id` (`job_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务日志';
+
+-- quartz自带表结构
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+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 DEFAULT CHARSET=utf8;
+
+CREATE TABLE QRTZ_LOCKS (
+SCHED_NAME VARCHAR(120) NOT NULL,
+LOCK_NAME VARCHAR(40) NOT NULL,
+PRIMARY KEY (SCHED_NAME,LOCK_NAME))
+ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+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);
\ No newline at end of file