相关文章推荐

这两个注解是用在哪里的?

1,注解@DisallowConcurrentExecution和@PersistJobDataAfterExecution都是用在org.quartz.Job的实现类上的。
2,都是针对JobDetail实例的,而不是Job实现类的。

注解说明:

@PersistJobDataAfterExecution :告诉Quartz在成功执行了Job实现类的execute方法后(没有发生任何异常),更新JobDetail中JobDataMap的数据,使得该JobDetail实例在下一次执行的时候,JobDataMap中是更新后的数据,而不是更新前的旧数据。

@DisallowConcurrentExecution :告诉Quartz不要并发地执行同一个JobDetail实例。

举例说明

同一个Job实现类 DemoJob 的两个JobDetail实例: A B ,设置A的定时执行频率为每1分钟执行一次,A的实际运行耗时为3分钟,B的定时执行频率也是每1分钟执行一次,B的实际运行耗时为30秒。假如在07:00分00秒时A和B同时第一次运行,则到07:00分30秒时B运行结束,此时A还在运行中,到07:01分00秒时A和B又该执行了,但是由于注解@DisallowConcurrentExecution的缘故,此时A不会再次运行,A只能在其上一次运行结束后才能再次被调用执行。但是B会正常运行(B不受A的影响,注解@DisallowConcurrentExecution是作用于JobDetail实例而不是Job实现类)

1,当某一个JobDetail实例到点运行之后,在其运行结束之前,不会再发起一次该JobDetail实例的调用,即使设置的该JobDetail实例的定时执行时间到了。
2,JobDetail实例之间互不影响

示例代码:
org.quartz.Job实现类:

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class DemoJob implements Job {
	@Override
    public void execute(JobExecutionContext context) {
		// do something

两个JobDetail实例:

// 定义触发器Trigger和调度器Scheduler省略
JobDetail A = JobBuilder.newJob(DemoJob.class)
                		.withDescription("jobDescription")
               			.withIdentity("name1", "group")
                		.build();
JobDetail B = JobBuilder.newJob(DemoJob.class)
                		.withDescription("jobDescription")
               			.withIdentity("name2", "group")
                		.build();

使用建议:

如果你使用了@PersistJobDataAfterExecution注解,则强烈建议你同时使用@DisallowConcurrentExecution注解,因为当同一个job(JobDetail)的两个实例被并发执行时,由于竞争,JobDataMap中存储的数据很可能是不确定的。

这两个注解是用在哪里的?1,注解@DisallowConcurrentExecution和@PersistJobDataAfterExecution都是用在org.quartz.Job的实现类上的。2,都是针对JobDetail实例的,而不是Job实现类的。注解说明:@PersistJobDataAfterExecution:告诉Quartz在成功执行了Job实现类的execute方法后(没有发生任何异常),更新JobDetail中JobDataMap的数据,使得该JobDetail实例在下一
@DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail, 这个注解是加在Job类上的, 但意思并不是不能同时执行多个Job, 而是不能并发执行同一个Job Definition(由JobDetail定义), 但是可以同时执行多个不同的JobDetail。 即对于同一个Job任务不允许并发执行,但对于不同的job任务不受影响。 @PersistJ...
都是用在Job实现类上。作用于JobDetail实例 @DisallowConcurrentExecution Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。 @DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail, 这个注解是加在Job类上的, 但可以同时执行多个Job, 而是不能并发执行同一个JobDetail, 可以同时执行多个不同的Job
本次遇到这个问题是这样一个场景,某些计算需要较长的时间,并且监控的周期会比较短。每3S监控一次,且执行周期最长已经达到5S,由于定时任务执行逻辑下一次依赖上一次的结果,因此如果并发的情况下,会导致计算错误。 在开发单个节点的时候,没有问题,当部署了多个执行阶段的时候,任务被并发的执行了。 好了,现在的问题是。DisallowConcurrentExecution没有做到真正的多机非并发执行! 解决方案是,增加分布式锁。为了不增加架构复杂度,直接引入了redisson红锁来进行处理。增加了BaseQuart
有状态的job和无状态的job @PersistJobDataAfterExecution注解的使用 有状态的job可以理解为多次Job调用期间可以持有一些状态信息,这些状态信息存储在JobDataMap,而默认的无状态job每次调用时都会创建一个新的jobDataMap 添加count的setter和getter方法 public Integer getCount() { return...
IJob默认情况下是无状态的,和其他系统没有关系 特别是job里面的jobdata每次都是新的。可以无限扩展。 PersistJobDataAfterExecution JobData持久化 Job在执行的后会生成一个新的Job为下一次执行,并且返回这个老的Job。 这样就保持了Job的无状态。但是有时候需要让他有状态,就要加上特性PersistJobDataAfterExe...
参考资料 http://stackoverflow.com/questions/1636556/ensure-that-spring-quartz-job-execution-doesnt-overlap JobDataMap:任务数据传输对象,并且以Map形式存储,它重载了:putAsString()方法,如下图: ,类说明如下:  Java代码 
Quartz定时任务默认是并发执行的,不会等待上一次任务执行完毕再执行下一个任务,也就是说当到达间隔时间就会执行对应的任务。 如果定时任执行太长,会长时间占用着资源,同时会出现多个线程并存的情况,导致其它任务堵塞。 如何解决呢? 可以在JOB的实现类上添加@DisallowConcurrentExecution注解,禁止同一个JobDetail并发执行。
quartz-console quartz-console是一个基于quartz集群模式下的quartz任务管理DEMO。 quartz集群模式将quartz任务持久化到DB,使得多个应用实例可以共同承担JOB的执行(每次执行前请求trigger的锁)。直接查询或修改quartz的数据表可能会影响quartz原有的调度模式。这个DEMO使用一个间接的task数据表,所有任务的修改都在这个数据表进行,而TaskScannerJob这个任务会定时扫描task表,将更新的任务实例化成具体的JOB。 TaskController提供了简单的接口供DEMO测试。
阿卡石英计 Quartz扩展和实用程序,可在Akka 2.6.x进行真正的调度。 当前版本是针对Scala 2.13.x和Akka 2.6.x构建的,可在Maven Central上使用。 如果您想支持Scala和Akka的其他组合,只需将您的请求发布在问题页面上(以及为什么当前可用的版本对您不起作用的原因。我一直对这些事情感到好奇)。 为什么选择Akka和Quartz? 请注意,由于以下原因,它被命名为akka-quartz-scheduler并被定位为目标:它不是Quartz的完整端口。 相反,我们利用Quartz的调度系统的概念为Akka提供了比现有的调度组件更健壮和可靠的调度组件。 这里的目标是为Akka提供一个调度系统,该调度系统与人们对Cron型作业的期望更加接近-设置可以长时间运行的ActorSystem,这些事件可以由Quartz启动。 目前尚无任何计划与分布式
Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。 在Spring这时需要设置concurrent的值为false, 禁止并发执行。 <property name="concurrent" value="true" /> 当不使用spring的时候就需要在Job的实现类上加@DisallowConcurrentExecution的注释 @DisallowConcurrentExecu.
 
推荐文章