quartz任务串行并行
来源:互联网 发布:淘宝陈枝记铁锅有毒 编辑:程序博客网 时间:2024/06/05 15:34
quartz任务串行并行
任务有并行和串行之分,并行是指:一个定时任务,当执行时间到了的时候,立刻执行此任务,不管当前这个任务是否在执行中;串行是指:一个定时任务,当执行时间到了的时候,需要等待当前任务执行完毕,再去执行下一个任务。
quartz框架中防止任务并行可以有两种方案:
1、如果是通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个concurrent属性,这个属性的功能是配置此job是否可以并行运行,如果为false则表示不可以并行运行,否则可以并行。如果一个job的业务处理发费的时间超过了job的启动的间隔时间(repeatInterval),这个属性非常有用。如果为false,那么,在这种情况下,当前job还在运行,那么下一个job只能延时运行。如果为true,那么job就会并行运行。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
<bean id=" jobCompareB2cAndLocal" class="com.vipshop.management.util.quartz.MethodInvokingJobDetailFactoryBean ">
<property name="targetObject " ref="delegateJob " />
<property name="targetMethod " value="方法名" />
<property name="concurrent " value="false "></property >
</bean >
2、如果是通过自定义要执行的任务的类的名称实现job的话,则有另一种方式:
默认的任务的类实现org.quartz.Job接口,此时任务是stateless(无状态的),即会出现并行的情况,那么如何避免这种情况发生呢?
解决方案:使QuartzJobBean类实现org.quartz.StatefulJob接口即可(StatefulJob接口仅仅是扩展了 Job 接口,未加入新的方法,可以不需实现Job接口了),那么此时任务就会变成stateful(有状态的),此时的任务也就会串行执行了。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class BackCoupon implements StatefulJob {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
}
}
下面说明的更详细一些:
防止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实例的属性可以从当前任务传递到下一个任务。
但是我试过上面的方法后,依然看见我们的后台程序是多线程的并行执行。可能是因为在程序中,我访问框架中自己写的service层导致的,至于这个问题,我没有查出原因,所以用了一种简单粗暴的方法,在执行的service层加锁机制,具体如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class FeeService extends BaseService {
public synchronized void save(){
}
}
任务有并行和串行之分,并行是指:一个定时任务,当执行时间到了的时候,立刻执行此任务,不管当前这个任务是否在执行中;串行是指:一个定时任务,当执行时间到了的时候,需要等待当前任务执行完毕,再去执行下一个任务。
quartz框架中防止任务并行可以有两种方案:
1、如果是通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个concurrent属性,这个属性的功能是配置此job是否可以并行运行,如果为false则表示不可以并行运行,否则可以并行。如果一个job的业务处理发费的时间超过了job的启动的间隔时间(repeatInterval),这个属性非常有用。如果为false,那么,在这种情况下,当前job还在运行,那么下一个job只能延时运行。如果为true,那么job就会并行运行。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
<bean id=" jobCompareB2cAndLocal" class="com.vipshop.management.util.quartz.MethodInvokingJobDetailFactoryBean ">
<property name="targetObject " ref="delegateJob " />
<property name="targetMethod " value="方法名" />
<property name="concurrent " value="false "></property >
</bean >
2、如果是通过自定义要执行的任务的类的名称实现job的话,则有另一种方式:
默认的任务的类实现org.quartz.Job接口,此时任务是stateless(无状态的),即会出现并行的情况,那么如何避免这种情况发生呢?
解决方案:使QuartzJobBean类实现org.quartz.StatefulJob接口即可(StatefulJob接口仅仅是扩展了 Job 接口,未加入新的方法,可以不需实现Job接口了),那么此时任务就会变成stateful(有状态的),此时的任务也就会串行执行了。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class BackCoupon implements StatefulJob {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
}
}
下面说明的更详细一些:
防止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实例的属性可以从当前任务传递到下一个任务。
但是我试过上面的方法后,依然看见我们的后台程序是多线程的并行执行。可能是因为在程序中,我访问框架中自己写的service层导致的,至于这个问题,我没有查出原因,所以用了一种简单粗暴的方法,在执行的service层加锁机制,具体如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
public class FeeService extends BaseService {
public synchronized void save(){
}
}
0 0
- quartz任务串行并行
- quartz任务串行并行
- quartz任务并行
- quartz任务并行
- java 定时任务串行并行
- AsyncTask异步任务(并行和串行)
- 进程/多线程/同步任务/异步任务/串行队列/并行队列
- 非spring 方式修改quartz定时任务为串行处理
- Java 并发编程实战学习笔记——串行任务转并行任务
- iOS -- 进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- 并行和串行通信
- 并行和串行计算
- 并行传输,串行传输
- 串行与并行
- 串行与并行
- 串行和并行区别
- Matplot 绘图中文乱码解决方案
- 散列表
- response的write输出问题
- Java String 源码浅析
- UVA 729 The Hamming Distance Problem
- quartz任务串行并行
- java中线程执行顺序控制
- 文件压缩项目
- Struts1.x使用入门
- javacv1.2调用,eclipse重新生成jar包
- restrict关键字个人总结
- docker1.12--安装
- 模拟CRLF实验失败而引发的探索
- MySQL索引的最左前缀原理与查询的相关优化