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