Quartz的任务的临时启动和暂停和恢复

在项目中需要手动启停某些服务,那么需要有一个控制这些任务的类。由于任务是有Quartz控制的,我们只需要通过Quartz的相关的API实现相关的功能即可。

?
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
package com.gbsoft.rpt.qtz;
 
import java.util.Date;
import java.util.List;
import java.util.Map;
 
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
 
/**
  * 一个简单的quartz任务管理器
  * @author 123
  *
  */
public class QuartzSchedule {
     private static  Scheduler scheduler=getScheduler();
     /**
      * 创建一个调度对象
      * @return
      * @throws SchedulerException
      */
     private static Scheduler getScheduler() {
             SchedulerFactory sf =  new StdSchedulerFactory();
             Scheduler scheduler= null ;
             try {
                 scheduler = sf.getScheduler();
             catch (SchedulerException e) {
                 e.printStackTrace();
             }
             return scheduler;
     }
     public static Scheduler getInstanceScheduler(){
         return scheduler;
     }
 
     /**
      * 启动一个调度对象
      * @throws SchedulerException
      */
     public  void start()  throws SchedulerException
     {
         scheduler.start();
     }
     
     /**
      * 检查调度是否启动
      * @return
      * @throws SchedulerException
      */
     public  boolean isStarted()  throws SchedulerException
     {
         return scheduler.isStarted();
     }
 
     /**
      * 关闭调度信息
      * @throws SchedulerException
      */
     public  void shutdown()  throws SchedulerException   {
         scheduler.shutdown();
     }
     /**
      * 添加调度的job信息
      * @param jobdetail
      * @param trigger
      * @return
      * @throws SchedulerException
      */
     public  Date scheduleJob(JobDetail jobdetail, Trigger trigger)
             throws SchedulerException{
                 return scheduler.scheduleJob(jobdetail, trigger);
     }
     /**
      * 添加相关的触发器
      * @param trigger
      * @return
      * @throws SchedulerException
      */
     public  Date scheduleJob(Trigger trigger)  throws SchedulerException{
         return scheduler.scheduleJob(trigger);
     }
      /**
       * 添加多个job任务
       * @param triggersAndJobs
       * @param replace
       * @throws SchedulerException
       */
      public  void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs,  boolean replace)  throws SchedulerException
      {
         scheduler.scheduleJobs(triggersAndJobs, replace);
     }
     /**
      * 停止调度Job任务
      * @param triggerkey
      * @return
      * @throws SchedulerException
      */
     public  boolean unscheduleJob(TriggerKey triggerkey)
             throws SchedulerException{
         return scheduler.unscheduleJob(triggerkey);
     }
 
     /**
      * 停止调度多个触发器相关的job
      * @param list
      * @return
      * @throws SchedulerException
      */
     public  boolean unscheduleJobs(List<TriggerKey> triggerKeylist)  throws SchedulerException{
         return scheduler.unscheduleJobs(triggerKeylist);
     }
     /**
      * 重新恢复触发器相关的job任务
      * @param triggerkey
      * @param trigger
      * @return
      * @throws SchedulerException
      */
     public  Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
     throws SchedulerException{
         return scheduler.rescheduleJob(triggerkey, trigger);
     }
     /**
      * 添加相关的job任务
      * @param jobdetail
      * @param flag
      * @throws SchedulerException
      */
     public  void addJob(JobDetail jobdetail,  boolean flag)
             throws SchedulerException   {
         scheduler.addJob(jobdetail, flag);
     }
 
     /**
      * 删除相关的job任务
      * @param jobkey
      * @return
      * @throws SchedulerException
      */
     public  boolean deleteJob(JobKey jobkey)  throws SchedulerException{
         return scheduler.deleteJob(jobkey);
     }
 
     /**
      * 删除相关的多个job任务
      * @param jobKeys
      * @return
      * @throws SchedulerException
      */
     public     boolean deleteJobs(List<JobKey> jobKeys)
     throws SchedulerException{
         return scheduler.deleteJobs(jobKeys);
     }
     /**
      *
      * @param jobkey
      * @throws SchedulerException
      */
     public  void triggerJob(JobKey jobkey)  throws SchedulerException    {
         scheduler.triggerJob(jobkey);
     }
     /**
      *
      * @param jobkey
      * @param jobdatamap
      * @throws SchedulerException
      */
     public  void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
             throws SchedulerException   {
         scheduler.triggerJob(jobkey, jobdatamap);
     }
     /**
      * 停止一个job任务
      * @param jobkey
      * @throws SchedulerException
      */
     public  void pauseJob(JobKey jobkey)  throws SchedulerException  {
         scheduler.pauseJob(jobkey);
     }
     /**
      * 停止多个job任务
      * @param groupmatcher
      * @throws SchedulerException
      */
     public  void pauseJobs(GroupMatcher<JobKey> groupmatcher)
             throws SchedulerException   {
         scheduler.pauseJobs(groupmatcher);
     }
     /**
      * 停止使用相关的触发器
      * @param triggerkey
      * @throws SchedulerException
      */
     public  void pauseTrigger(TriggerKey triggerkey)
             throws SchedulerException   {
         scheduler.pauseTrigger(triggerkey);
     }
 
     public  void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
             throws SchedulerException   {
         scheduler.pauseTriggers(groupmatcher);
     }
     /**
      * 恢复相关的job任务
      * @param jobkey
      * @throws SchedulerException
      */
     public  void resumeJob(JobKey jobkey)  throws SchedulerException {
         scheduler.pauseJob(jobkey);
     }
     
     public  void resumeJobs(GroupMatcher<JobKey> matcher)
             throws SchedulerException   {
         scheduler.resumeJobs(matcher);
     }
 
     public  void resumeTrigger(TriggerKey triggerkey)
             throws SchedulerException   {
         scheduler.resumeTrigger(triggerkey);
     }
    
     public  void resumeTriggers(GroupMatcher<TriggerKey>  groupmatcher)
             throws SchedulerException
     {
         scheduler.resumeTriggers(groupmatcher);
     }
     /**
      * 暂停调度中所有的job任务
      * @throws SchedulerException
      */
     public  void pauseAll()  throws SchedulerException
     {
         scheduler.pauseAll();
     }
     /**
      * 恢复调度中所有的job的任务
      * @throws SchedulerException
      */
     public  void resumeAll()  throws SchedulerException
     {
         scheduler.resumeAll();
     }
}


创建一个Job任务:

?
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
package com.gbsoft.rpt.qrz;
 
import java.util.Date;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
/**
  * 一个简单的quartz调用job
  * @author 123
  *
  */
public class HelloJob  implements Job {
 
     private static Logger _log = LoggerFactory.getLogger(HelloJob. class );
 
     public HelloJob() {
     }
 
     public void execute(JobExecutionContext context)
         throws JobExecutionException {
         _log.info( "Hello World! - " new Date());
     }
 
}

创建触发器和调用相关的Job

?
1
2
3
4
5
6
7
package com.gbsoft.rpt.qrz;
 
import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
 
import java.util.Date;
?
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
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
  * 一个简单的测试quartz任务管理器测试类
  * @author 123
  *
  */
public class QuartzScheduleMain {
 
     
     /**
      *
      * @throws Exception
      */
     public void run()  throws Exception {
         Logger log = LoggerFactory.getLogger(QuartzScheduleMain. class );
 
         log.info( "------- Initializing ----------------------" );
 
         // First we must get a reference to a scheduler
         //从调度管理器中获取调度对象
         Scheduler sched = QuartzScheduleMgr.getInstanceScheduler();
         log.info( "------- Initialization Complete -----------" );
 
         // computer a time that is on the next round minute
         Date runTime = evenMinuteDate( new Date());
 
         log.info( "------- Scheduling Job  -------------------" );
 
         // define the job and tie it to our HelloJob class
         //创建相关的job信息
         JobDetail job = newJob(HelloJob. class )
             .withIdentity( "job1" "group1" )
             .build();
         
         // Trigger the job to run on the next round minute
         //创建一个触发器的名称
         Trigger trigger = newTrigger()
             .withIdentity( "trigger1" "group1" )
             .startAt(runTime)
             .build();
         
         // Tell quartz to schedule the job using our trigger
         //设置调度相关的Job
         sched.scheduleJob(job, trigger);
         log.info(job.getKey() +  " will run at: " + runTime); 
 
         // Start up the scheduler (nothing can actually run until the
         // scheduler has been started)
         //启动调度任务
         sched.start();
 
         log.info( "------- Started Scheduler -----------------" );
 
         try {
             Thread.sleep(25L * 1000L);
             // executing...
         catch (Exception e) {
         }
         //暂时停止Job任务开始执行
         log.info( "-------pauseJob.. -------------" );
         sched.pauseJob(job.getKey());
         
         try {
             Thread.sleep(10L * 1000L);
         catch (Exception e) {
         }
         log.info( "------- resumeJob... -------------" );
         //恢复Job任务开始执行
         sched.resumeJob(job.getKey());
         try {
             Thread.sleep(10L * 1000L);
             // executing...
         catch (Exception e) {
         }
         
         
         // wait long enough so that the scheduler as an opportunity to
         // run the job!
         log.info( "------- Waiting 65 seconds... -------------" );
         try {
             // wait 65 seconds to show job
             Thread.sleep(65L * 1000L);
             // executing...
         catch (Exception e) {
         }
 
         // shut down the scheduler
         log.info( "------- Shutting Down ---------------------" );
         sched.shutdown( true );
         log.info( "------- Shutdown Complete -----------------" );
     }
 
     public static void main(String[] args)  throws Exception {
 
         QuartzScheduleMain example =  new QuartzScheduleMain();
         example.run();
 
     }
 
}

官网地址: http://www.quartz-scheduler.org/documentation/quartz-2.1.x/quick-start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值