admin
2019-07-26 35cf951bb5528828ffea52d010d13b68f192d43f
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.yeshi.fanli.job;
 
import java.util.Iterator;
import java.util.Map;
 
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Component;
 
import com.yeshi.fanli.log.LogHelper;
 
@Component
public class QuartzManager {
    
    private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
    private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
 
    /**
     *  创建任务:使用默认 任务组、定时组名
     * @param sched
     * @param jobName
     * @param time
     * @param params
     * @param cls
     */
    public static void addJob(Scheduler sched, @SuppressWarnings("rawtypes") Class cls, String jobName, 
            String time, Map<String, String> params) {
        try {
            
            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
            
            if (trigger == null) {
                LogHelper.test("------addJob---任务创建-----" + jobName + "------- ");
                JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(jobName, JOB_GROUP_NAME).build();
                if (params != null) {
                    Iterator<String> its = params.keySet().iterator();
                    while (its.hasNext()) {
                        String key = its.next();
                        jobDetail.getJobDataMap().put(key, params.get(key));
                    }
                }
                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
                trigger = TriggerBuilder.newTrigger().withIdentity(jobName, TRIGGER_GROUP_NAME)
                        .withSchedule(scheduleBuilder).build();
                sched.scheduleJob(jobDetail, trigger);
            }
            
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
 
    
    
 
    /**
     * 修改任务
     * 
     * @param sched
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * @param time
     * @param params
     * @param cls
     */
    @SuppressWarnings("rawtypes")
    public static void modifyJob(Scheduler sched, Class cls, String jobName, 
             String time, Map<String, String> params ) {
 
        try {
 
            LogHelper.test("------modifyJob---任务修改-----" + jobName + "------- ");
 
            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
            
            if (trigger == null) {
                return;
            }
            
            // 删除原任务
            removeJob(sched, jobName);
 
            // 新建任务
            addJob(sched, QualityFactoryJob.class, jobName, time, params);
 
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    
    
 
    /**
     * @Description: 修改一个任务的触发时间
     * 
     * @param sched
     *            调度器 *
     * @param sched
     *            调度器
     * @param triggerName
     * @param triggerGroupName
     * @param time
     * 
     * @Title: QuartzManager.java
     */
    public static void modifyJobTime(Scheduler sched, String triggerName, String triggerGroupName, String time) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
            CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
            if (trigger == null) {
                return;
            }
            // Trigger已存在,那么更新相应的定时设置
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(time);
 
            // 按新的cronExpression表达式重新构建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
 
            // 按新的trigger重新设置job执行
            sched.rescheduleJob(triggerKey, trigger);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
 
 
    /**
     * @Description: 移除一个任务
     * 
     * @param sched
     *            调度器
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * 
     * @Title: QuartzManager.java
     */
    public static void removeJob(Scheduler sched, String jobName) {
        try {
 
            LogHelper.test("------modifyJob---任务删除-----" + jobName + "------- ");
 
 
            JobKey jobKey = new JobKey(jobName, JOB_GROUP_NAME);
            sched.pauseJob(jobKey);
            
            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, TRIGGER_GROUP_NAME);
            
            sched.pauseTrigger(triggerKey); // 停止触发器
            sched.unscheduleJob(triggerKey);// 移除触发器  
            
            sched.pauseJob(jobKey); // 停止任务
            sched.deleteJob(jobKey);// 删除任务
            
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
 
    /**
     * @Description:启动所有定时任务
     * 
     * @param sched
     *            调度器
     * 
     * @Title: QuartzManager.java
     */
    public static void startJobs(Scheduler sched) {
        try {
            sched.start();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
 
    /**
     * @Description:关闭所有定时任务
     * 
     * 
     * @param sched
     *            调度器
     * 
     * 
     * @Title: QuartzManager.java
     */
    public static void shutdownJobs(Scheduler sched) {
        try {
            if (!sched.isShutdown()) {
                sched.shutdown();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
 
}