pojo类:
public class EmrOvertimeSet implements Serializable {
private Integer id;
private Integer days;
private Integer deadDays;
private Integer surplusDays;
private String remindTime;
private Integer int1;
private String str1;
private Integer int2;
private String str2;
private static final long serialVersionUID = 1L;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
}
public Integer getDeadDays() {
return deadDays;
}
public void setDeadDays(Integer deadDays) {
this.deadDays = deadDays;
}
public Integer getSurplusDays() {
return surplusDays;
}
public void setSurplusDays(Integer surplusDays) {
this.surplusDays = surplusDays;
}
public String getRemindTime() {
return remindTime;
}
public void setRemindTime(String remindTime) {
this.remindTime = remindTime == null ? null : remindTime.trim();
}
public Integer getInt1() {
return int1;
}
public void setInt1(Integer int1) {
this.int1 = int1;
}
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1 == null ? null : str1.trim();
}
public Integer getInt2() {
return int2;
}
public void setInt2(Integer int2) {
this.int2 = int2;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2 == null ? null : str2.trim();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", days=").append(days);
sb.append(", deadDays=").append(deadDays);
sb.append(", surplusDays=").append(surplusDays);
sb.append(", remindTime=").append(remindTime);
sb.append(", int1=").append(int1);
sb.append(", str1=").append(str1);
sb.append(", int2=").append(int2);
sb.append(", str2=").append(str2);
sb.append("]");
return sb.toString();
}
}
配置任务线程池,注入到容器:ThreadPoolTaskScheduler
@Configuration
public class ScheduleConfig {
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
return new ThreadPoolTaskScheduler();
}
}
动态执行数据库任务代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
@Component
public class DynamicScheduleTaskSecond {
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
@Autowired
private Task1 scheduleExport;
private ScheduledFuture<?> future;
public void setCron(String cron) {
stopCron();
future = threadPoolTaskScheduler.schedule(new Runnable() {
@Override
public void run() {
try {
scheduleExport.task1();// 执行任务
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
if ("".equals(cron) || cron == null) {
return null;
}
CronTrigger trigger = new CronTrigger(cron);// 定时任务触发,可修改定时任务的执行周期
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
}
});
}
public void stopCron() {
if (future != null) {
future.cancel(true);//取消任务调度
}
}
}
主要是(String cron),表单修改时需要调用该方法的setCron(String cron)方法,如:
//重新执行任务
dynamicScheduleTaskSecond.setCron(overtimeSet.getRemindTime());
项目启动先执行:
@Component
public class WebServiceLoad {
@Autowired
private DynamicScheduleTaskSecond dynamicScheduleTaskSecond;
@Autowired
private EmrOvertimeSetMapper overtimeSetMapper;
@PostConstruct
public void contextInitialized() {
new Thread(() -> {
EmrOvertimeSet emrOvertimeSet = overtimeSetMapper.selectByPrimaryKey(1);
dynamicScheduleTaskSecond.setCron(emrOvertimeSet.getRemindTime());
}).start();
}
}