我們先封裝一個作業調度實體類: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);
}
}