DynamicJob.java
3.17 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
package com.ecar.apm.quartz;
import org.quartz.*;
import java.util.Map;
/**
* 一个动态的 job 信息
*
* @author Shengzhao Li
*/
public class DynamicJob {
//要执行类, 实现Job接口
private Class<? extends Job> target;
//cron 表达式
private String cronExpression;
private String jobGroup = Scheduler.DEFAULT_GROUP;
//必须唯一
private String jobName;
private transient TriggerKey triggerKey;
private transient JobDetail jobDetail;
//default
public DynamicJob() {
}
public DynamicJob(String jobName) {
this.jobName = jobName;
}
public Class<? extends Job> target() {
return target;
}
public DynamicJob target(Class<? extends Job> target) {
this.target = target;
return this;
}
public DynamicJob cronExpression(String cronExpression) {
this.cronExpression = cronExpression;
return this;
}
public String jobGroup() {
return jobGroup;
}
public DynamicJob jobGroup(String jobGroup) {
this.jobGroup = jobGroup;
return this;
}
public String jobName() {
return jobName;
}
public DynamicJob jobName(String jobName) {
this.jobName = jobName;
return this;
}
public TriggerKey triggerKey() {
if (triggerKey == null) {
triggerKey = TriggerKey.triggerKey(this.jobName, this.jobGroup);
}
return triggerKey;
}
public JobDetail jobDetail() {
if (jobDetail == null) {
jobDetail = JobBuilder.newJob(target)
.withIdentity(this.jobName, this.jobGroup)
.build();
}
return jobDetail;
}
/*
* 传参数给 执行的 job
* 在job中 通过
* context.getMergedJobDataMap().get(key) 获取值
* */
public DynamicJob addJobData(String key, Object value) {
final JobDetail detail = jobDetail();
final JobDataMap jobDataMap = detail.getJobDataMap();
jobDataMap.put(key, value);
return this;
}
/*
* 传参数给 执行的 job
* 在job中 通过
* context.getMergedJobDataMap().get(key) 获取值
* */
public DynamicJob addJobDataMap(Map<String, Object> map) {
final JobDetail detail = jobDetail();
final JobDataMap jobDataMap = detail.getJobDataMap();
jobDataMap.putAll(map);
return this;
}
public String cronExpression() {
return this.cronExpression;
}
public CronTrigger cronTrigger() {
final CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(this.cronExpression);
return TriggerBuilder.newTrigger().withIdentity(triggerKey())
.withSchedule(cronScheduleBuilder)
.build();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("{target=").append(target);
sb.append(", cronExpression='").append(cronExpression).append('\'');
sb.append(", jobGroup='").append(jobGroup).append('\'');
sb.append(", jobName='").append(jobName).append('\'');
sb.append('}');
return sb.toString();
}
}