防止job并行运行的几种解决方案
一、JOB State
在通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个concurrent属性,表示job是否可以并行运行:如果一个job的业务处理发费的时间超过了job的启动的间隔时间(repeatInterval),这个属性非常有用。如果为false,那么,在这种情况下,当前job还在运行,那么下一个job只能延时运行。如果为true,那么job就会并行运行。在实际的应用中应该配置为true/false,要根据需要了(废话)。
二、如果通过继承QuartzJobBean实现job的话,默认情况下QuartzJobBean是implements org.quartz.Job接口的,也就是说job示例是stateless的,会出现前面所述的并行情况。而代码中却要求job任务必需串行,解决办法:在job子类中继续implements org.quartz.StatefulJob。那么这个job实例变成了Stateful,job任务也就是串行的了。
注:
在Quartz中,如果实现org.quartz.Job接口,那么这个job是stateless的,job实例的参数不能在多个任务之间共享,如果实现org.quartz.StatefulJob,这个job是个单例的,job实例的属性可以从当前任务传递到下一个任务。
分享到:
相关推荐
定时任务quartz实现分组串行并行动态配置
Spring Quartz 任务调度实例 可直接运行 可应用服务器启动调用 也可main入口调用 主要用于打jar包用
java中spring quartz定时任务demo,里面包含项目所需的quartz.jar, spring.jar包,配置文件等,可直接运行使用
Spring Quartz定时任务 jar包
各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定 用户解锁任务。对于一个典型的MIS系统来说,在每月1号凌晨统计上...
Spring Quartz 动态暂停、恢复、修改定时任务的一个demo,使用maven构建,框架采用spring springmvc jpa,数据库mysql,含数据库脚本,运行可用,页面访问地址http://localhost:8080/quartz_demo/quartz/list
使用Spring Quartz执行定时任务
spring quartz java任务调度 完整 可执行
spring-quartz定时任务的小实例,可运行的项目+说明
spring quartz类全包spring quartz类全包
Spring+Quartz定时任务Demo,导入工程就能直接运行,applicationContext.xml设置定时任务触发器
Spring Quartz 定时调度任务,带中文注解与jar文件,导入项目即可直接运行。
Spring Quartz如何动态配置时间
spring quartz
spring+quartz任务调度代码版
利用spring的Quartz做任务调度所需要的所有jar包
spring任务调度(Quartz )非常基础,
spring注解Quartz定时执行功能
用到了spring的任务调度 ,动手写了个demo