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

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

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

Java代码  

  1. package com.easyway.app.quartz.mgr;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.quartz.JobDataMap;
  6. import org.quartz.JobDetail;
  7. import org.quartz.JobKey;
  8. import org.quartz.Scheduler;
  9. import org.quartz.SchedulerException;
  10. import org.quartz.SchedulerFactory;
  11. import org.quartz.Trigger;
  12. import org.quartz.TriggerKey;
  13. import org.quartz.impl.StdSchedulerFactory;
  14. import org.quartz.impl.matchers.GroupMatcher;
  15. /**
  16. * 一个简单的quartz任务管理器
  17. * @author longgangbai
  18. *
  19. */
  20. public class QuartzScheduleMgr {
  21. private static  Scheduler scheduler=getScheduler();
  22. /**
  23. * 创建一个调度对象
  24. * @return
  25. * @throws SchedulerException
  26. */
  27. private static Scheduler getScheduler() {
  28. SchedulerFactory sf = new StdSchedulerFactory();
  29. Scheduler scheduler=null;
  30. try {
  31. scheduler = sf.getScheduler();
  32. } catch (SchedulerException e) {
  33. e.printStackTrace();
  34. }
  35. return scheduler;
  36. }
  37. public static Scheduler getInstanceScheduler(){
  38. return scheduler;
  39. }
  40. /**
  41. * 启动一个调度对象
  42. * @throws SchedulerException
  43. */
  44. public  void start() throws SchedulerException
  45. {
  46. scheduler.start();
  47. }
  48. /**
  49. * 检查调度是否启动
  50. * @return
  51. * @throws SchedulerException
  52. */
  53. public  boolean isStarted() throws SchedulerException
  54. {
  55. return scheduler.isStarted();
  56. }
  57. /**
  58. * 关闭调度信息
  59. * @throws SchedulerException
  60. */
  61. public  void shutdown() throws SchedulerException   {
  62. scheduler.shutdown();
  63. }
  64. /**
  65. * 添加调度的job信息
  66. * @param jobdetail
  67. * @param trigger
  68. * @return
  69. * @throws SchedulerException
  70. */
  71. public  Date scheduleJob(JobDetail jobdetail, Trigger trigger)
  72. throws SchedulerException{
  73. return scheduler.scheduleJob(jobdetail, trigger);
  74. }
  75. /**
  76. * 添加相关的触发器
  77. * @param trigger
  78. * @return
  79. * @throws SchedulerException
  80. */
  81. public  Date scheduleJob(Trigger trigger) throws SchedulerException{
  82. return scheduler.scheduleJob(trigger);
  83. }
  84. /**
  85. * 添加多个job任务
  86. * @param triggersAndJobs
  87. * @param replace
  88. * @throws SchedulerException
  89. */
  90. public  void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs, boolean replace) throws SchedulerException
  91. {
  92. scheduler.scheduleJobs(triggersAndJobs, replace);
  93. }
  94. /**
  95. * 停止调度Job任务
  96. * @param triggerkey
  97. * @return
  98. * @throws SchedulerException
  99. */
  100. public  boolean unscheduleJob(TriggerKey triggerkey)
  101. throws SchedulerException{
  102. return scheduler.unscheduleJob(triggerkey);
  103. }
  104. /**
  105. * 停止调度多个触发器相关的job
  106. * @param list
  107. * @return
  108. * @throws SchedulerException
  109. */
  110. public  boolean unscheduleJobs(List<TriggerKey> triggerKeylist) throws SchedulerException{
  111. return scheduler.unscheduleJobs(triggerKeylist);
  112. }
  113. /**
  114. * 重新恢复触发器相关的job任务
  115. * @param triggerkey
  116. * @param trigger
  117. * @return
  118. * @throws SchedulerException
  119. */
  120. public  Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
  121. throws SchedulerException{
  122. return scheduler.rescheduleJob(triggerkey, trigger);
  123. }
  124. /**
  125. * 添加相关的job任务
  126. * @param jobdetail
  127. * @param flag
  128. * @throws SchedulerException
  129. */
  130. public  void addJob(JobDetail jobdetail, boolean flag)
  131. throws SchedulerException   {
  132. scheduler.addJob(jobdetail, flag);
  133. }
  134. /**
  135. * 删除相关的job任务
  136. * @param jobkey
  137. * @return
  138. * @throws SchedulerException
  139. */
  140. public  boolean deleteJob(JobKey jobkey) throws SchedulerException{
  141. return scheduler.deleteJob(jobkey);
  142. }
  143. /**
  144. * 删除相关的多个job任务
  145. * @param jobKeys
  146. * @return
  147. * @throws SchedulerException
  148. */
  149. public     boolean deleteJobs(List<JobKey> jobKeys)
  150. throws SchedulerException{
  151. return scheduler.deleteJobs(jobKeys);
  152. }
  153. /**
  154. *
  155. * @param jobkey
  156. * @throws SchedulerException
  157. */
  158. public  void triggerJob(JobKey jobkey) throws SchedulerException    {
  159. scheduler.triggerJob(jobkey);
  160. }
  161. /**
  162. *
  163. * @param jobkey
  164. * @param jobdatamap
  165. * @throws SchedulerException
  166. */
  167. public  void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
  168. throws SchedulerException   {
  169. scheduler.triggerJob(jobkey, jobdatamap);
  170. }
  171. /**
  172. * 停止一个job任务
  173. * @param jobkey
  174. * @throws SchedulerException
  175. */
  176. public  void pauseJob(JobKey jobkey) throws SchedulerException  {
  177. scheduler.pauseJob(jobkey);
  178. }
  179. /**
  180. * 停止多个job任务
  181. * @param groupmatcher
  182. * @throws SchedulerException
  183. */
  184. public  void pauseJobs(GroupMatcher<JobKey> groupmatcher)
  185. throws SchedulerException   {
  186. scheduler.pauseJobs(groupmatcher);
  187. }
  188. /**
  189. * 停止使用相关的触发器
  190. * @param triggerkey
  191. * @throws SchedulerException
  192. */
  193. public  void pauseTrigger(TriggerKey triggerkey)
  194. throws SchedulerException   {
  195. scheduler.pauseTrigger(triggerkey);
  196. }
  197. public  void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
  198. throws SchedulerException   {
  199. scheduler.pauseTriggers(groupmatcher);
  200. }
  201. /**
  202. * 恢复相关的job任务
  203. * @param jobkey
  204. * @throws SchedulerException
  205. */
  206. public  void resumeJob(JobKey jobkey) throws SchedulerException {
  207. scheduler.pauseJob(jobkey);
  208. }
  209. public  void resumeJobs(GroupMatcher<JobKey> matcher)
  210. throws SchedulerException   {
  211. scheduler.resumeJobs(matcher);
  212. }
  213. public  void resumeTrigger(TriggerKey triggerkey)
  214. throws SchedulerException   {
  215. scheduler.resumeTrigger(triggerkey);
  216. }
  217. public  void resumeTriggers(GroupMatcher<TriggerKey>  groupmatcher)
  218. throws SchedulerException
  219. {
  220. scheduler.resumeTriggers(groupmatcher);
  221. }
  222. /**
  223. * 暂停调度中所有的job任务
  224. * @throws SchedulerException
  225. */
  226. public  void pauseAll() throws SchedulerException
  227. {
  228. scheduler.pauseAll();
  229. }
  230. /**
  231. * 恢复调度中所有的job的任务
  232. * @throws SchedulerException
  233. */
  234. public  void resumeAll() throws SchedulerException
  235. {
  236. scheduler.resumeAll();
  237. }
  238. }

创建一个Job任务:

Java代码  

  1. /*
  2. * Copyright 2005 - 2009 Terracotta, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy
  6. * of the License at
  7. *
  8. *   http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations
  14. * under the License.
  15. *
  16. */
  17. package com.easyway.app.quartz.mgr;
  18. import java.util.Date;
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21. import org.quartz.Job;
  22. import org.quartz.JobExecutionContext;
  23. import org.quartz.JobExecutionException;
  24. /**
  25. * 一个简单的quartz调用job
  26. * @author longgangbai
  27. *
  28. */
  29. public class HelloJob implements Job {
  30. private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
  31. public HelloJob() {
  32. }
  33. public void execute(JobExecutionContext context)
  34. throws JobExecutionException {
  35. _log.info("Hello World! - " + new Date());
  36. }
  37. }

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

Java代码  

  1. /*
  2. * Copyright 2005 - 2009 Terracotta, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy
  6. * of the License at
  7. *
  8. *   http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations
  14. * under the License.
  15. *
  16. */
  17. package com.easyway.app.quartz.mgr;
  18. import static org.quartz.DateBuilder.evenMinuteDate;
  19. import static org.quartz.JobBuilder.newJob;
  20. import static org.quartz.TriggerBuilder.newTrigger;
  21. import java.util.Date;
  22. import org.quartz.JobDetail;
  23. import org.quartz.Scheduler;
  24. import org.quartz.Trigger;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. /**
  28. * 一个简单的测试quartz任务管理器测试类
  29. * @author longgangbai
  30. *
  31. */
  32. public class QuartzScheduleMain {
  33. /**
  34. *
  35. * @throws Exception
  36. */
  37. public void run() throws Exception {
  38. Logger log = LoggerFactory.getLogger(QuartzScheduleMain.class);
  39. log.info("------- Initializing ----------------------");
  40. // First we must get a reference to a scheduler
  41. //从调度管理器中获取调度对象
  42. Scheduler sched = QuartzScheduleMgr.getInstanceScheduler();
  43. log.info("------- Initialization Complete -----------");
  44. // computer a time that is on the next round minute
  45. Date runTime = evenMinuteDate(new Date());
  46. log.info("------- Scheduling Job  -------------------");
  47. // define the job and tie it to our HelloJob class
  48. //创建相关的job信息
  49. JobDetail job = newJob(HelloJob.class)
  50. .withIdentity("job1", "group1")
  51. .build();
  52. // Trigger the job to run on the next round minute
  53. //创建一个触发器的名称
  54. Trigger trigger = newTrigger()
  55. .withIdentity("trigger1", "group1")
  56. .startAt(runTime)
  57. .build();
  58. // Tell quartz to schedule the job using our trigger
  59. //设置调度相关的Job
  60. sched.scheduleJob(job, trigger);
  61. log.info(job.getKey() + " will run at: " + runTime);
  62. // Start up the scheduler (nothing can actually run until the
  63. // scheduler has been started)
  64. //启动调度任务
  65. sched.start();
  66. log.info("------- Started Scheduler -----------------");
  67. try {
  68. Thread.sleep(25L * 1000L);
  69. // executing...
  70. } catch (Exception e) {
  71. }
  72. //暂时停止Job任务开始执行
  73. log.info("-------pauseJob.. -------------");
  74. sched.pauseJob(job.getKey());
  75. try {
  76. Thread.sleep(10L * 1000L);
  77. } catch (Exception e) {
  78. }
  79. log.info("------- resumeJob... -------------");
  80. //恢复Job任务开始执行
  81. sched.resumeJob(job.getKey());
  82. try {
  83. Thread.sleep(10L * 1000L);
  84. // executing...
  85. } catch (Exception e) {
  86. }
  87. // wait long enough so that the scheduler as an opportunity to
  88. // run the job!
  89. log.info("------- Waiting 65 seconds... -------------");
  90. try {
  91. // wait 65 seconds to show job
  92. Thread.sleep(65L * 1000L);
  93. // executing...
  94. } catch (Exception e) {
  95. }
  96. // shut down the scheduler
  97. log.info("------- Shutting Down ---------------------");
  98. sched.shutdown(true);
  99. log.info("------- Shutdown Complete -----------------");
  100. }
  101. public static void main(String[] args) throws Exception {
  102. QuartzScheduleMain example = new QuartzScheduleMain();
  103. example.run();
  104. }
  105. }
时间: 2024-10-18 01:46:14

Quartz的任务的临时启动和暂停和恢复的相关文章

springmvc+easyui实现界面控制quartz的暂停、恢复、修改、添加

1.把quartz的表达式信息放到数据库中: package cn.edu.nuc.entity; public class ScheduleJob { private Integer id; /** 任务id */ private String jobId; /** 任务名称 */ private String jobName; /** 任务分组 */ private String jobGroup; /** 任务状态 0禁用 1启用 2删除*/ private int jobStatus;

iOS开发 -文件下载(4 暂停和恢复)

iOS开发网络篇—文件下载(四·暂停和恢复) 一.Range简单说明 通过设置请求头Range可以指定每次从网路下载数据包的大小 Range示例 bytes=0-499 从0到499的头500个字节 bytes=500-999 从500到999的第二个500字节 bytes=500- 从500字节以后的所有字节 bytes=-500 最后500个字节 bytes=500-599,800-899 同时指定几个范围 Range小结 - 用于分隔 前面的数字表示起始字节数 后面的数组表示截止字节数,没

iOS开发网络篇—文件下载(四&#183;暂停和恢复)

iOS开发网络篇—文件下载(四·暂停和恢复) 一.Range简单说明 通过设置请求头Range可以指定每次从网路下载数据包的大小 Range示例 bytes=0-499 从0到499的头500个字节 bytes=500-999 从500到999的第二个500字节 bytes=500- 从500字节以后的所有字节 bytes=-500 最后500个字节 bytes=500-599,800-899 同时指定几个范围 Range小结 - 用于分隔 前面的数字表示起始字节数 后面的数组表示截止字节数,没

WPF控制动画开始、停止、暂停和恢复

1.闲言 好久也没更新一博客了,自己有点发懒,同时确实这几个月来也有点忙.风机监测软件,项目中,有这样一个小需求:正常风机在旋转的时候,上位机软要做一个风机的图片,让它不停地旋转,一但检测到下面风机停止了,上位机软件界面的风机图片也要跟着停止,并且风机图片的旋转速度最好是能够与真实的速度成比例关系,这样软件才更有逼格一点.就是实现这样一个效果,看下图1,左边是一个状态指示,没有做动画,只是做了一个图片的切换,效果还看得过去吧. 图1 风机旋转动画 2.动画制作 在WPF做动画前,首先超码得有3个

利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)

利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程,一个是异步调用的打印线程,需要实现的是在主线程中的控件(暂停打印按纽)来控制打印线程   的暂停和恢复. ManualResetEvent就像一个信号灯,当有信号的时候(初始化为true或者有线程调用它的set()方法)就表示所有在等待(WaitOne())的线程,你们可以 继续运行了,当没有信号的

Pausing and Resuming an Activity 暂停和恢复活动

Pausing and Resuming an Activity 暂停和恢复活动 PreviousNextGet started This lesson teaches you to Pause Your Activity               暂停活动 Resume Your Activity            恢复活动 You should also read Activities Try it out Download the demo ActivityLifecycle.zip

暂停和恢复Activity Android

暂停和恢复Activity(Pausing and Resuming an Activity) 在正常的应用程序使用,前台activity有时会被其他可视化组件遮挡,从而 造成activity的暂停.例如,当一个半透明的activity打开时(如在一个风格对话框),以前的activity就暂停了.只要 activity仍然是部分可见,但目前没有获得焦点,它就依然处于暂停状态. 然而,一旦activity被完全遮挡住,并且对用户不可见了,那么它就停止了 (这是下一课需要讨论的内容). 当你的act

U盘做启动盘后,如何恢复原始容量

上次用U盘装系统后,U盘缩水1G多,格式化和快速格式化,没有用,无法恢复U盘原来的容量,后来在网上查到一个方法,成功释放U盘空间,故将恢复方法写在下面. (1)右击“我的电脑”,选择“管理”选项,之后选择“磁盘管理”,查看自己U盘的索引,如:Disk 1 (2)在运行窗口,输入cmd,回车,出现Dos运行环境,输入Diskpart,回车,弹出另一个命令窗口,然后将在上面(1)中的索引,输入select disk 1 进去,回车,输入clean,之后即可将空间内容清除: (3)再在(1)中的索引处

OGEngine之暂停、恢复游戏

原来的AndEngine中需要自己停止绘制Scene,现在OGEngine有新方法,只要一步即可实现,重写BaseGameActivity的这两个方法即可 @Override        public synchronized void onResumeGame() {                super.onResumeGame();                this.getEngine().start();                //TODO resume Audio