`

计划任务的顺序执行[Quartz Scheduler v.2.1.6]

    博客分类:
  • java
 
阅读更多

使用Quartz做计划任务时,默认情况下,当前任务总会执行,无论前一个任务是否结束。从如下日志可以看出,job被并发执行,无视前面任务是否结束。

 

13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:14:04,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:14:04 CST 2013
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - n=2
13:14:06,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 executing at Sun Apr 07 13:14:06 CST 2013
13:14:07,095 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - n=3
13:14:08,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - group1.job1 executing at Sun Apr 07 13:14:08 CST 2013
13:14:09,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 done.

 

 

因此,如果采用默认条件,需要考虑并发执行的逻辑问题,否则需要设置为顺序执行。

 

第一种办法是为自定义的job加上@org.quartz.DisallowConcurrentExecution注解,告诉quartz不允许并发执行job任务。这个办法粗粒度地解决了并发问题,缺少灵活度,但很简单,也很简洁。

 

13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:20:04,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:20:04 CST 2013
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - n=2
13:20:07,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 executing at Sun Apr 07 13:20:07 CST 2013
13:20:10,017 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - group1.job1 done.

 

 

第二种办法是在job的执行方法体内编写处理代码

 

13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - n=1
13:24:18,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 executing at Sun Apr 07 13:24:18 CST 2013
13:24:20,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:20,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-2 - < 
13:24:21,236 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-1 - group1.job1 done.
13:24:22,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_QuartzSchedulerThread - new a simple job
13:24:22,001 INFO  [creative.air.schedule.quartz.SimpleJob] DefaultQuartzScheduler_Worker-3 - n=2

 

相关测试代码:

 

测试类

job生产类

job类

 

最后需要注意的是,quartz的发展出现了分支,目前存在并行版本

spring与quartz1集成更友好

分享到:
评论

相关推荐

    quartz-2.1.6.zip

    这些类允许开发者定义任务执行的时间规则,并且可以灵活地与Spring容器中的bean进行集成。 quartz-examples-2.1.6.jar 提供了Quartz的示例代码,这些示例可以帮助开发者更好地理解和学习如何使用Quartz的各种特性,...

    quartz-scheduler分享.docx

    Quartz-Scheduler还提供了丰富的API来支持如暂停、恢复、删除任务,以及对任务执行状态的查询等功能。同时,它也支持集群环境,可以在多台服务器上部署,提供高可用性和容错性。 总的来说,Quartz-Scheduler是一个...

    quartz scheduler 入门教程

    如果你的应用有任务需要在给定时间执行,或者你的系统需要定期执行某些任务,那么 Quartz Scheduler 就是你的理想选择。例如: * 驱动工作流进程:当一个新订单生成后,指定一个计划任务在 2 小时后触发,该任务将...

    使用 Redis 的 Quartz Scheduler JobStore .zip

    使用 Redis 的 Quartz Scheduler JobStore。quartz-redis-jobstore使用Redis的Quartz Scheduler JobStore...配置您的文件中可以设置以下属性quartz.properties# set the scheduler's JobStore class (required)org.quar

    quartz-2.1.6.jar

    JAVA,quartz 2.1.6开发包。

    Getting_Started_with_Quartz_Scheduler.pdf Version 2.2.1

    创建作业涉及定义作业的类,并实现`org.quartz.Job`接口。作业类需要重写`execute`方法,其中编写具体的业务逻辑。 #### 定义触发器 触发器决定了作业何时何地被执行。Quartz Scheduler支持多种类型的触发器,包括...

    quartz2.1.6

    Job 是实际要执行的任务,可以是任何实现了 `org.quartz.Job` 接口的类;Trigger 则定义了 Job 的执行时间,如简单触发器或cron触发器。 在部署 Quartz 2.1.6 时,你需要包含以下关键组件: 1. **Quartz JAR 文件**...

    quartz jar包

    quartz-2.1.6.jar quartz-all-2.1.6.jar quartz-backward-compat-2.1.6.jar quartz-commonj-2.1.6.jar quartz-examples-2.1.6.jar quartz-jboss-2.1.6.jar quartz-oracle-2.1.6.jar quartz-weblogic-2.1.6.jar

    对于Quartz.net 3.0.7.0(目前最高版本)的使用:能过配置文件实现工作调整

    { "quartz.plugin.xml.fileNames", xmlConfig }, // 其他必要的配置项... }; using (var factory = new StdSchedulerFactory(properties)) { var scheduler = await factory.GetSchedulerAsync(); await ...

    quartz-all-2.1.6

    java 定时任务 quartz all 2.1.6

    Quartz调度、终止执行的任务

    Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...

    quartz-1.8.6.jar

    开发者需要自定义Job类,继承自`org.quartz.Job`接口,并实现`execute`方法,这是任务执行的入口。 2. **Trigger(触发器)**:Trigger定义了何时触发Job执行。Quartz提供了多种类型的Trigger,如SimpleTrigger...

    quartz-2.2.1.jar

    它是一个实现了`org.quartz.Job`接口的类,包含具体的业务逻辑。作业不直接与调度器交互,而是通过作业细节(JobDetail)来关联。 2. 作业细节(JobDetail):包含了作业的所有元数据,如作业的名称、组名、状态和...

    quartz-1.8.3.jar

    Quartz 是一个开源的工作调度框架,它允许程序员在 Java 应用程序中安排任务执行。这个 "quartz-1.8.3.jar" 文件是 Quartz 框架的一个特定版本,版本号为 1.8.3。在这个版本中,Quartz 提供了对计划任务管理和执行的...

    Quartz.net 3.0.7.0数据库持久化.rar

    Quartz.NET是一个开源的作业调度框架,用于在.NET环境中创建和执行计划任务。这个压缩包“Quartz.net 3.0.7.0数据库持久化.rar”包含了关于如何使用Quartz.NET实现任务调度的数据库持久化和集群配置的资料。Quartz...

    quartz-2.2.3.jar

    Quartz允许你精确地控制任务执行的时间,例如按小时、分钟、甚至秒来设定触发时间,也可以设置成周期性的执行。 在Quartz中,你需要创建Job类来实现自定义的任务逻辑,然后通过JobBuilder创建JobDetail对象,定义...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    5. **集群同步**:Quartz的`StatefulJob`接口可以防止同一任务在集群中的多个节点同时执行,但需要注意的是,如果任务不是状态化的(即实现了`org.quartz.Job`而非`StatefulJob`),则需要自定义逻辑来保证执行的...

    quartZ定时任务.zip

    - 创建一个实现了`org.quartz.Job`接口的类,该类代表了要执行的任务。 - 使用`@DisallowConcurrentExecution`注解可确保同一时间只有一个实例在执行。 - 定义一个`JobDetail`实例,关联上面创建的`Job`类,并...

    quartz-2.2.0.jar.zip

    import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; public class QuartzExample { ...

    quartz-2.1.5.tar.gz

    这确保了系统重启后,任务仍然能够按照预定计划执行。 5. **插件机制**:Quartz提供了丰富的插件接口,如JobStore(用于存储Job和Trigger)、ThreadPool(线程池)等,方便扩展和定制。 6. **API与配置**:Quartz...

Global site tag (gtag.js) - Google Analytics