quartz job运行中修改cron表达式_Spring4+Springmvc+quartz实现多线程动态定时调度

2c41320b29406a08135cddf9b5624a15.png

scheduler定时调度系统是大多行业项目都需要的,传统的spring-job模式,个人感觉已经out了,因为存在很多的问题,特别是定时调度的追加、修改、删除等,需要修改xml,xml的配置生效无非是热部署灰度发布方案或者直接停止、重启服务器,完全不能做到自动启动、修复方式。

提醒:可以对应用进行集群部署,在对定时调度配置时可以使用集群方式或者单边配置应用方式,今天讲解的是使用spring4+scheduler实现定时调度,闲话少说,直接把步骤记录下来:

  1. 在项目的pom.xml文件中引入quartz的jar包,如下:
  org.quartz-scheduler  quartz  1.8.5
  1. 定义quartz的配置文件spring-context-quartz.xml:
<?xml version="1.0" encoding="UTF-8"?>  xml 3. 在项目的web.xml文件中引入spring-context-quartz.xml配置文件 ​```xml classpath*:spring-context-quartz.xml 
  1. 定义job实体对象
public class Job{   private static final long serialVersionUID = 1L;   /**  * 任务执行周期cron表达式  */  public static int EXECYCLE_CRON = 2;  /**  * 任务执行周期自定义  */  public static int EXECYCLE_DEFINE = 1;  /**  * 执行周期-分钟  */  public static int EXECYCLE_MINUTE = 1;  /**  * 执行周期-小时  */  public static int EXECYCLE_HOUR = 2;  /**  * 执行周期-日  */  public static int EXECYCLE_DAY = 3;  /**  * 执行周期-月  */  public static int EXECYCLE_WEEK = 4;  /**  * 执行周期-月  */  public static int EXECYCLE_MONTH = 5;    private String jobType; // 任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)  private String jobName; // 任务名称  private String jobClass; // 任务类  private String execycle; // 执行周期分类(1非表达式 2 cron表达式)  private String dayOfMonth; // 每月的哪天  private String dayOfWeek; // 周几  private String hour; // 小时  private String minute; // 分钟  private String intervalHour; // 间隔小时  private String intervalMinute; // 间隔分钟  private String jobIntervalUnit; // 1分钟、2小时、3日、4周、5月  private String cronExpression; // 规则表达式  private String isEnable; // 是否启用   public Job() {  super();  }   public Job(String id){  super(id);  }   @Length(min=1, max=1, message="任务类型(1首页静态化、2栏目页静态化、3内容页静态化、4采集、5分发)长度必须介于 1 和 1 之间")  public String getJobType() {  return jobType;  }   public void setJobType(String jobType) {  this.jobType = jobType;  }   @Length(min=1, max=255, message="任务名称长度必须介于 1 和 255 之间")  public String getJobName() {  return jobName;  }   public void setJobName(String jobName) {  this.jobName = jobName;  }   @Length(min=1, max=255, message="任务类长度必须介于 1 和 255 之间")  public String getJobClass() {  return jobClass;  }   public void setJobClass(String jobClass) {  this.jobClass = jobClass;  }   @Length(min=1, max=1, message="执行周期分类(1非表达式 2 cron表达式)长度必须介于 1 和 1 之间")  public String getExecycle() {  return execycle;  }   public void setExecycle(String execycle) {  this.execycle = execycle;  }   @Length(min=0, max=11, message="每月的哪天长度必须介于 0 和 11 之间")  public String getDayOfMonth() {  return dayOfMonth;  }   public void setDayOfMonth(String dayOfMonth) {  this.dayOfMonth = dayOfMonth;  }   @Length(min=0, max=1, message="周几长度必须介于 0 和 1 之间")  public String getDayOfWeek() {  return dayOfWeek;  }   public void setDayOfWeek(String dayOfWeek) {  this.dayOfWeek = dayOfWeek;  }   @Length(min=0, max=11, message="小时长度必须介于 0 和 11 之间")  public String getHour() {  return hour;  }   public void setHour(String hour) {  this.hour = hour;  }   @Length(min=0, max=11, message="分钟长度必须介于 0 和 11 之间")  public String getMinute() {  return minute;  }   public void setMinute(String minute) {  this.minute = minute;  }   @Length(min=0, max=11, message="间隔小时长度必须介于 0 和 11 之间")  public String getIntervalHour() {  return intervalHour;  }   public void setIntervalHour(String intervalHour) {  this.intervalHour = intervalHour;  }   @Length(min=0, max=11, message="间隔分钟长度必须介于 0 和 11 之间")  public String getIntervalMinute() {  return intervalMinute;  }   public void setIntervalMinute(String intervalMinute) {  this.intervalMinute = intervalMinute;  }   @Length(min=0, max=1, message="1分钟、2小时、3日、4周、5月长度必须介于 0 和 1 之间")  public String getJobIntervalUnit() {  return jobIntervalUnit;  }   public void setJobIntervalUnit(String jobIntervalUnit) {  this.jobIntervalUnit = jobIntervalUnit;  }   @Length(min=0, max=255, message="规则表达式长度必须介于 0 和 255 之间")  public String getCronExpression() {  return cronExpression;  }   public void setCronExpression(String cronExpression) {  this.cronExpression = cronExpression;  }   @Length(min=1, max=1, message="是否启用长度必须介于 1 和 1 之间")  public String getIsEnable() {  return isEnable;  }   public void setIsEnable(String isEnable) {  this.isEnable = isEnable;  }  } 
  1. 编写quartz的jobServvice类:
package top.alterem.job.service;  import java.text.ParseException; import java.util.List;import java.util.UUID; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;  import top.alterem.StringUtils; import top.alterem.common.persistence.Page; import top.alterem.common.service.CrudService; import top.alterem.job.dao.JobDao; import top.alterem.job.entity.Job;  /**  * 定时调度任务Service  *  * @author honghu  */ @Service @Transactional(readOnly = true) public class JobService extends CrudService {   @Autowired  private JobDao jobDao;   private Logger logger = LoggerFactory.getLogger(getClass());   public Job get(String id) {  return super.get(id);  }   public List findList(Job job) {  return super.findList(job);  }   public Page findPage(Page page, Job job) {  return super.findPage(page, job);  }   @Transactional(readOnly = false)  public void save(Job job) {  super.save(job);  // 启用则启动任务  if (StringUtils.equals("1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值