springboot 多线程定时任务(我配置14个定时任务,每个里边都有一个修改时间的方法),第一次启动时14个都执行了一遍,执行正常,cron 有的时间是设置30秒,有的时间是一分钟, 5分钟后再去看表里的时,会发现有的时间没有改,有的跑的是正常的,有一些sql 执行失败了,这是什么原因。
package com.krd.zhsq.quartz;
import com.krd.zhsq.collection.entity.QrtzCronTask;
import com.krd.zhsq.collection.mapping.QrtzCronTaskMapper;
import com.krd.zhsq.collection.service.QrtzCronTaskService;
import com.krd.zhsq.quartz.service.*;
import com.krd.zhsq.statistics.service.StatisticsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;
import java.util.concurrent.Executors;
@Configuration
@EnableScheduling
public class CompleteScheduleConfig implements SchedulingConfigurer {
@Autowired
private QrtzCronTaskMapper cronMapper;
@Autowired
private CaculateTaskService smsSendTask;
@Autowired
private CaseWarningTaskService caseWarningTask;
@Autowired
private RedWarningTaskService redWarningTask;
@Autowired
private JpushTaskService jpushTask;
@Autowired
private WebSocketTaskService webSocketTask;
@Autowired
private RealDayDataTaskService realDayDataTask;
@Autowired
private PatrolExamineTaskService patrolExamineTask;
@Autowired
private EpidemicPreventionTaskService epidemicPreventionTask;
@Autowired
private CaculateTaskService caculateTask;
@Autowired
private SixRealCaculateTaskService sixRealCaculateTask;
@Autowired
private SixRealCaculateForJDTaskService sixRealCaculateForJDTask;
@Autowired
private StatOnlineTaskService statOnlineTask;
@Autowired
private ZhibiaoScoreTaskService zhibiaoScoreTask;
@Autowired
private StatisticsService statisticsService;
@Autowired
private QrtzCronTaskService qrtzCronTaskService;
private int id;
private QrtzCronTask qrtzCronTask = new QrtzCronTask();
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
/**
* 线程池设置:有几个定时任务设置几个线程,设置少了会造成线程阻塞
*/
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(20));
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() ->smsSendTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
// System.out.print("短信定时任务1"+LocalDateTime.now().toLocalTime());
//2.1 从数据库获取执行周期时间
id=1;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
qrtzCronTaskService.updateQrtzCronTask(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> caseWarningTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=2;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> redWarningTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=3;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> jpushTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=4;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> webSocketTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=5;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> realDayDataTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=6;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> patrolExamineTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=7;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> epidemicPreventionTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=8;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> caculateTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=9;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> sixRealCaculateTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=10;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> sixRealCaculateForJDTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=11;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> statOnlineTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 从数据库获取执行周期时间
id=12;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> zhibiaoScoreTask.run(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 根据任务cron_id从数据库获取执行周期时间
id=13;
String cron = cronMapper.getCronTask(id);
//运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> statisticsService.HouseDetail(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 根据任务cron_id从数据库获取执行周期时间
id=14;
String cron = cronMapper.getCronTask(id);
//更新运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);*/
taskRegistrar.addTriggerTask(
//1.添加任务内容(Runnable)
() -> statisticsService.searchGridmemberStatistics(),
//2.设置执行id(表cron_rd字段)
triggerContext -> {
//2.1 根据任务cron_id从数据库获取执行周期时间
id=15;
String cron = cronMapper.getCronTask(id);
//更新运行时间
qrtzCronTask.setExecutiontime(new Date());
qrtzCronTask.setCronId(String.valueOf(id));
cronMapper.updateTime(qrtzCronTask);
//2.3 返回执行周期(Date)
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
}
}
多打一些日志吧,结合日志分析