QuartzUtils.java
5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.huaheng.license.verify.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
/**
* 定时器工具类
*
* @author Rong.Jia
* @date 2021/06/29
*/
@Slf4j
public class QuartzUtils {
/**
* 创建定时任务 定时任务创建之后默认启动状态
*
* @param scheduler 调度器
* @param quartzTask 定时任务信息类
*/
public static void createScheduleJob(Scheduler scheduler, QuartzTask quartzTask) {
try {
// 构建定时任务信息
JobDetail jobDetail = JobBuilder.newJob(quartzTask.getJobClass()).withIdentity(quartzTask.getJobName()).build();
// 设置定时任务执行方式
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzTask.getCronExpression());
// 构建触发器trigger
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(quartzTask.getJobName()).withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
if (!scheduler.isShutdown()) {
scheduler.start();
}
log.info("创建定时任务成功 jobName : {}", quartzTask.getJobClass().getName());
} catch (SchedulerException e) {
log.error("创建定时任务出错 {}", e.getMessage());
}
}
/**
* 根据任务名称暂停定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
*/
public static void pauseScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.pauseJob(jobKey);
log.info("暂停定时任务成功 {}", jobName);
} catch (SchedulerException e) {
log.error("暂停定时任务出错 {}", e.getMessage());
}
}
/**
* 根据任务名称恢复定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
*/
public static void resumeScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.resumeJob(jobKey);
log.info("启动定时任务成功 {}", jobName);
} catch (SchedulerException e) {
log.error("启动定时任务出错 {}", e.getMessage());
}
}
/**
* 中断
*
* @param scheduler 调度器
* @param jobName 作业名
*/
public static void interrupt(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.interrupt(jobKey);
log.info("中断定时任务成功 {}", jobName);
} catch (SchedulerException e) {
log.error("中断定时任务出错 {}", e.getMessage());
}
}
/**
* 根据任务名称立即运行一次定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
*/
public static void runOnce(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
scheduler.triggerJob(jobKey);
} catch (SchedulerException e) {
log.error("运行定时任务出错 {}", e.getMessage());
}
}
/**
* 更新定时任务
*
* @param scheduler 调度器
* @param quartzTask 定时任务信息类
*/
public static void updateScheduleJob(Scheduler scheduler, QuartzTask quartzTask) {
try {
//获取到对应任务的触发器
TriggerKey triggerKey = TriggerKey.triggerKey(quartzTask.getJobName());
//设置定时任务执行方式
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzTask.getCronExpression());
//重新构建任务的触发器trigger
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
//重置对应的job
scheduler.rescheduleJob(triggerKey, trigger);
} catch (SchedulerException e) {
log.error("更新定时任务出错 {}", e.getMessage());
}
}
/**
* 根据定时任务名称从调度器当中删除定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
*/
public static void deleteScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
try {
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
boolean deleteJob = scheduler.deleteJob(jobKey);
log.info("删除定时任务成功:{}", deleteJob);
} catch (SchedulerException e) {
log.error("删除定时任务出错 {}", e.getMessage());
}
}
/**
* 根据定时任务名称判断调度器中是否存在指定任务
*
* @param scheduler 调度器
* @param jobName 作业名
* @return 是否存在
*/
public static Boolean checkExistsScheduleJob(Scheduler scheduler, String jobName) {
JobKey jobKey = JobKey.jobKey(jobName);
try {
return scheduler.checkExists(jobKey);
} catch (SchedulerException e) {
log.error("检查定时任务出错 {}", e.getMessage());
}
return Boolean.FALSE;
}
}