怎么用quartz控制任务的执行顺序

问题描述

最近接手一个项目,通过web方式配置定时调度,一个调度有多个步骤,每个步骤的作用都不同,并且相互依赖。想到了用quartz+spring,做出了一个demo,可以动态的添加调度步骤,做一些到服务器上转存日志之类的工作。现在的问题是有很多个步骤都要执行,比如 job1 -->job2、job3 --> job4 --> job5、job6、job7大概就是这样一个顺序,请问如何处理呢?本人是新手,思考良久,仍未想到解决方案。。。

解决方案

把需要并行的任务塞到一个任务队列里面,用一个线程去执行,比如下面的代码:import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;public class OrderedJobService {private BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(10);private boolean running = false;public void start() {running = true;Thread t = new Thread(new OrderedJob());t.start();}public void stop() {running = false;}public void submit(Runnable job) {try {if (queue.offer(job, 5000L, TimeUnit.MILLISECONDS) == false) {// 处理插入失败...}} catch (InterruptedException e) {e.printStackTrace();}}class OrderedJob implements Runnable {@Overridepublic void run() {while (running) {try {Runnable job = queue.poll(5000L, TimeUnit.MILLISECONDS);try {if (job != null)job.run();} catch (RuntimeException e) {// TODO: handle exception}} catch (InterruptedException e) {e.printStackTrace();}}}}}测试代码:public class OrderedJobs {static int x = 0;public static void main(String[] args) {OrderedJobService service = new OrderedJobService();service.start();for (int i = 0; i < 10; i++) {service.submit(new Runnable() {@Overridepublic void run() {System.out.println(x++);}});}synchronized (service) {try {service.wait(3000L);} catch (InterruptedException e) {e.printStackTrace();}}//释放线程service.stop();}}
解决方案二:
用for循环不就可以了吗?
解决方案三:
把需要串行的任务塞到一个任务队列里面...不好意思,写错了
解决方案四:
当前 Quartz 并不支持任务的调度顺序,只是用来实现对某个任务的时间调度,例如每天的2点执行某个任务。你说的这个需求只能通过应用层来实现,例如当 job1 执行完毕时,自己去启动 job2 的执行,当然 job1 在什么时间启动可以通过 Quartz 来调度。总之,你需要自己写程序来配置任务的调度顺序。

时间: 2024-09-20 21:42:34

怎么用quartz控制任务的执行顺序的相关文章

Enterprise Library Policy Injection Application Block 之四:如何控制CallHandler的执行顺序

一.为什么CallHandler需要进行排序 PIAB为我们提供了一个很好地实现AOP的方式.AOP旨在实现Business Logic和Non-Business Infrastructure Logic的分离.通过PIAB,我们将这些业务无关的逻辑定义在一个个的CallHandler中,然后通过Attribute或者Configuration的方式,将我们所需的CallHandler运用到相应的目标对象中.从这个意义上讲,PIAB具有很好的Flexibility和Extensibility.但

js 异步操作回调函数如何控制执行顺序

 本文为大家讲解下js异步操作时回调函数如何控制执行顺序,感兴趣的朋友可以参考下 需求:  fun A() { asyn(parm1, parm2, onsuccess(){ }) ;}  fun B() {asyn(paem1, parm2, onsuccess(){}) ;}    函数B要求执行在函数A之后    异步执行  如果直接使用  A();  B();    是不能够满足执行条件的.    考虑将B作为回调函数传递给A,然后A再执行的onsucess中执行B函数  A(B); 

用例执行顺序-怎么控制robotium用例的执行顺序

问题描述 怎么控制robotium用例的执行顺序 rubotium中用例的执行顺序吗?如果有的用例不想被执行,该怎么做呢 解决方案 robotium 有很多解释的.

Sql查询原理与Select执行顺序(详细)

原文地址:点击打开链接 一切都是为了性能,一切都是为了业务 一.查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WHERE where_condition (5) GROUP BY group_by_list (6) WITH {cube | rollup} (7) HAVING having_condition (8) SELECT (9) DISTINCT (11)

ios-IOS通知观察者执行顺序问题

问题描述 IOS通知观察者执行顺序问题 当一个通知有多个观察者, 通知发生时,观察者的执行顺序是什么,是随机的吗, 如果是,有什么办法使他们按一定的顺序去执行? 解决方案 Observer的接收顺序是没有固定的,如果有业务冲突则需要自己用逻辑去控制好,去除对顺序的依赖 解决方案二: 观察者执行顺序就是,哪个观察者先运行哪个就先收到通知.通知发出者只管发出,接不接受和它没有关系,谁先接收谁就优先有数据. 解决方案三: 可以理解为随机的,一般情况下,你还是少用通知吧,或者说你多用几个KEY 解决方案

Nginx 配置指令的执行顺序(三)

如前文所述,除非像 ngx_set_misc 模块那样使用特殊技术,其他模块的配置指令即使是在 rewrite 阶段运行,也不能和 ngx_rewrite 模块的指令混合使用.不妨来看几个这样的例子.       第三方模块 ngx_headers_more 提供了一系列配置指令,用于操纵当前请求的请求头和响应头.其中有一条名叫 more_set_input_headers 的指令可以在 rewrite 阶段改写指定的请求头(或者在请求头不存在时自动创建).这条指令总是运行在 rewrite 阶

jquery中ajax 事件执行顺序介绍

事件执行顺序我们如下,从向到下 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事件) 6.error 7.ajaxError (全局事件) 8.complete 9.ajaxComplete(全局事件) 10.ajaxStop(全局事件) 补充一下ajax jQuery AJAX 请求 请求 描述 $(selector).load(url,data,callback) 把远程数据加载到被选的元素

探析浏览器执行JavaScript脚本加载与代码执行顺序_javascript技巧

本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析.渲染以及其他资源的下载都要停下来等待脚本执行完毕①.这一点是没有争议的,并且在所有浏览器中的行为都是一致的,原因也不难理解:浏览器需要一个稳定的DOM结构,而JavaScript可能会修改DOM(改变DOM结构或修改某个

Nginx 配置指令的执行顺序(十)

运行在 post-rewrite 阶段之后的是所谓的 preaccess 阶段.该阶段在 access 阶段之前执行,故名preaccess.       标准模块 ngx_limit_req 和 ngx_limit_zone 就运行在此阶段,前者可以控制请求的访问频度,而后者可以限制访问的并发度.这里我们仅仅和它们打个照面,后面还会有机会专门接触到这两个模块.       前面反复提到的标准模块 ngx_realip 其实也在这个阶段注册了处理程序.有些读者可能会问:"这是为什么呢?它不是已经