我们先封装一个作业调度实体类:jobTrigger
private String key; //唯一key
private String jobName; //任务名字
private String jobGroup; //任务组别
private String jobClassName; //执行的类名
private String triggerName; //触发器名字
private String triggerGroup; //触发器组别
private String cronExpession; // cron表达式
private Bool runState; //启动状态
private Date timesTriggered; //起始时间
private Date endTimeTriggered; //结束时间
private Long repeatCount; //重复次数
private Long repeatInterval; //间隔
private Bool isCron; //是否cron
引用
@Autowired
private Scheduler scheduler;
1.初始化 触发器
注意:起始时间如果少于当前时间,在执行
scheduler.scheduleJob(jobDetail, trigger);
后会立即将任务执行一次.
触发器只介绍了 简单模式和cron 两种模式,看代码
private Trigger initTrigger(JobTrigger jobTrigger) {
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
String triggerName = jobTrigger.triggerName;
String triggerGroup = jobTrigger.triggerGroup;
triggerBuilder.withIdentity(triggerName, triggerGroup);
if(DataUtil.isNotEmpty(jobTrigger.timesTriggered))
{
if(jobTrigger.timesTriggered<new Date())
{
triggerBuilder.startNow();
}
else
{
Date startAt = new Date();
triggerBuilder.startAt(startAt);
}
}
else
{
triggerBuilder.startNow();
}
if(DataUtil.isNotEmpty(jobTrigger.endTimeTriggered))
{
Date endAt = jobTrigger.endTimeTriggered;
triggerBuilder.endAt(endAt);
}
if(jobTrigger.isCron)
{
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(jobTrigger.cronExpession));
}
else{
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); simpleScheduleBuilder.withIntervalInSeconds(jobTrigger.getSjtRepeatInterval().intValue());
if(jobTrigger.repeatCount>0)
{
simpleScheduleBuilder.withRepeatCount(jobTrigger.repeatCount);
}
else
{
simpleScheduleBuilder.repeatForever();
}
triggerBuilder.withSchedule(simpleScheduleBuilder);
}
Trigger trigger = triggerBuilder.build();
return trigger;
}
2.初始化 触发器
private JobDetail initJobDetail(JobTrigger jobTrigger){
String JobName =jobTrigger.jobName;
String JobGroup = jobTrigger.jobGroup;
Class<? extends BaseJob> jobClass = (Class<? extends BaseJob>)Class.forName(jobTrigger.jobClassName());
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(JobName, JobGroup).withDescription(jobTrigger.getSjtJobName())
.build();
return jobDetail;
}
3.新增任务
public void addJob(JobTrigger jobTrigger) {
JobDetail jobDetail = initJobDetail(jobTrigger);
Trigger trigger = initTrigger(jobTrigger);
if (DataUtil.isNotEmpty(jobDetail) && DataUtil.isNotEmpty(trigger)) {
if (!scheduler.checkExists(trigger.getKey())) {
scheduler.scheduleJob(jobDetail, trigger);// 设置调度相关的Job
}
if (jobTrigger.runState) {
scheduler.resumeJob(jobDetail.getKey()); //启动
} else {
scheduler.pauseJob(jobDetail.getKey());//停止
}
}
}
4.修改任务 触发时间
public void modifyJobTime(JobTrigger jobTrigger) {
String triggerName = jobTrigger.triggerName;
String triggerGroup =jobTrigger.triggerGroup;
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
if (trigger == null) {
return;
}
Trigger newTrigger = this.initTrigger(jobTrigger);
scheduler.rescheduleJob(triggerKey, newTrigger);
}
5.移除任务
public void removeJob(JobTrigger jobTrigger) {
String triggerName = jobTrigger.triggerName;
String triggerGroup =jobTrigger.triggerGroup;
String JobName =jobTrigger.jobName;
String JobGroup = jobTrigger.jobGroup;
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
JobKey jobKey = JobKey.jobKey(JobName,JobGroup);
// 停止触发器
scheduler.pauseTrigger(triggerKey);
// 移除触发器
scheduler.unscheduleJob(triggerKey);
// 删除任务
scheduler.pauseJob(jobKey);
scheduler.deleteJob(jobKey);
}
6.启动所有的定时任务
scheduler.start();
7 .关闭任务
scheduler.shutdown();
8 立即执行任务
public void executionJob(JobTrigger jobTrigger) throws Exception {
String JobName = jobTrigger.jobName;
String JobGroup = jobTrigger.jobGroup;
JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
if (this.scheduler.checkExists(jobKey)) {
this.scheduler.triggerJob(jobKey);
}
}
9.暂停所有任务
scheduler.pauseAll();
10 .暂停任务
public void pauseJob(JobTrigger jobTrigger) throws SchedulerException
{
String JobName =jobTrigger.jobName;
String JobGroup = jobTrigger.jobGroup;
JobKey jobKey= JobKey.jobKey(JobName,JobGroup);
String triggerName = jobTrigger.triggerName;
String triggerGroup = jobTrigger.triggerGroup;
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName,triggerGroup);
scheduler.pauseJob(jobKey);
scheduler.pauseTrigger(triggerKey);
}
11.重启所有任务
scheduler.resumeAll();
12.清理所有的任务
scheduler.clear();
13.重启任务
public void resumeJob(JobTrigger jobTrigger) throws SchedulerException {
String JobName = jobTrigger.jobName;
String JobGroup =jobTrigger.jobGroup;
String triggerName = jobTrigger.triggerName();
String triggerGroup = jobTrigger.triggerGroup();
JobKey jobKey = JobKey.jobKey(JobName, JobGroup);
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup);
if (!this.scheduler.checkExists(triggerKey)&&!this.scheduler.checkExists(jobKey)) {
this.addJob(jobTrigger);
}
if (this.scheduler.checkExists(triggerKey)) {
scheduler.resumeTrigger(triggerKey);
}
if (this.scheduler.checkExists(jobKey)) {
scheduler.resumeJob(jobKey);
}
}