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

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

注解说明:

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

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

举例说明

同一个Job实现类DemoJob的两个JobDetail实例:AB,设置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 {@Overridepublic 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中存储的数据很可能是不确定的。

详解Quartz中的注解:@DisallowConcurrentExecution和@PersistJobDataAfterExecution相关推荐

  1. 详解Java中的注解

    在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注 ...

  2. 【java】详解java中的注解(Annotation)

    目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...

  3. 详解Dart中如何通过注解生成代码

    简介:详解dart与java注解生成代码异同点 作者:闲鱼技术-龙湫 1.背景 最近在项目中使用到了Dart中的注解代码生成技术,这跟之前Java中APT+JavaPoet生成代码那套技术还是有一些不 ...

  4. 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)

    三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...

  5. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  6. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) ...

  7. 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器

    详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1. 效果图 2. 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器. 光流是由物体或相机的运动 ...

  8. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

  9. python3中unicode怎么写_详解python3中ascii与Unicode使用

    这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...

最新文章

  1. 企业为实现网络营销更要将网络营销重点放在用户价值上
  2. 企业云计算架构--笔记
  3. 仅展示近三天的动态设置_不要把朋友圈设置成3天可见……
  4. substance design graph 不显示_每天1分钟背单词 词根 graph
  5. 华为软件机试测试题C语言,华为软件测试面试经验
  6. 西塘游(2007-08-14)
  7. 2020-08-03 手动编译Qt库(msvc2019版本)
  8. 职场攻略:每天淘汰自己的不足
  9. html list列表
  10. MS17-010 补丁下载官方地址
  11. 表单提交时报错:No result defined for action com.ylj.action.BbsAction and result input
  12. DOORS 和Reqtify — 需求管理和需求追溯工具
  13. 10027Longest Ordered Subsequence Extention
  14. cxxxxx和xxxxx.h的区别
  15. c++编程题 袋鼠过河
  16. 对数坐标图python怎么画_python绘制半对数坐标
  17. .Net 垃圾回收机制原理(一)
  18. ssm栾城五中的图书管理毕业设计源码171727
  19. 信息学奥赛真题解析(美国信息学回文数)
  20. (转载)从IRQ到IRQL(APIC版)

热门文章

  1. linux看不到光模块,万兆光模块无法识别问题
  2. ale.js 对比其他框架
  3. 计算机基础-将机械硬盘换成固态硬盘
  4. TI 评级报告 | RAI Finance:B,展望正面
  5. 广工学生“纯手工”打造赛车 将出征F1赛道
  6. htmlunit 使用代理IP
  7. RediSearch一个媲美es的全文搜索引擎
  8. 【软件测试】如何梳理你测试的业务
  9. Zotero文献管理工具使用指南
  10. 小米手机MIUI13系统最全的关闭广告教程