详解Quartz中的注解:@DisallowConcurrentExecution和@PersistJobDataAfterExecution
这两个注解是用在哪里的?
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 {@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相关推荐
- 详解Java中的注解
在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注 ...
- 【java】详解java中的注解(Annotation)
目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...
- 详解Dart中如何通过注解生成代码
简介:详解dart与java注解生成代码异同点 作者:闲鱼技术-龙湫 1.背景 最近在项目中使用到了Dart中的注解代码生成技术,这跟之前Java中APT+JavaPoet生成代码那套技术还是有一些不 ...
- 三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程)
三维空间刚体运动5:详解SLAM中显示机器人运动轨迹及相机位姿(原理流程) 一.显示运动轨迹原理讲解 二.前期准备 三.git管理子模块及克隆源代码 1.学习使用Git Submodule 2.克隆源 ...
- python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...
今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...
- 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)
用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) ...
- 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器
详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1. 效果图 2. 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器. 光流是由物体或相机的运动 ...
- python操作目录_详解python中的文件与目录操作
详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...
- python3中unicode怎么写_详解python3中ascii与Unicode使用
这篇文章主要为大家详解python3中ascii与Unicode使用的相关资料,需要的朋友可以参考下# Auther: Aaron Fan ''' ASCII:不支持中文,1个英文占1个字节 Unic ...
最新文章
- 企业为实现网络营销更要将网络营销重点放在用户价值上
- 企业云计算架构--笔记
- 仅展示近三天的动态设置_不要把朋友圈设置成3天可见……
- substance design graph 不显示_每天1分钟背单词 词根 graph
- 华为软件机试测试题C语言,华为软件测试面试经验
- 西塘游(2007-08-14)
- 2020-08-03 手动编译Qt库(msvc2019版本)
- 职场攻略:每天淘汰自己的不足
- html list列表
- MS17-010 补丁下载官方地址
- 表单提交时报错:No result defined for action com.ylj.action.BbsAction and result input
- DOORS 和Reqtify — 需求管理和需求追溯工具
- 10027Longest Ordered Subsequence Extention
- cxxxxx和xxxxx.h的区别
- c++编程题 袋鼠过河
- 对数坐标图python怎么画_python绘制半对数坐标
- .Net 垃圾回收机制原理(一)
- ssm栾城五中的图书管理毕业设计源码171727
- 信息学奥赛真题解析(美国信息学回文数)
- (转载)从IRQ到IRQL(APIC版)