Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。

在Spring中这时需要设置concurrent的值为false, 禁止并发执行。

<property name="concurrent" value="true" />

当不使用spring的时候就需要在Job的实现类上加@DisallowConcurrentExecution的注释

@DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail, 这个注解是加在Job类上的,

但意思并不是不能同时执行多个Job, 而是不能并发执行同一个Job Definition(由JobDetail定义),

但是可以同时执行多个不同的JobDetail, 举例说明,我们有一个Job类,叫做SayHelloJob, 并在这个Job上加了这个注解, 然后在这个Job上定义了很多个JobDetail,

如sayHelloToJoeJobDetail, sayHelloToMikeJobDetail, 那么当scheduler启动时, 不会并发执行多个sayHelloToJoeJobDetail或者sayHelloToMikeJobDetail,

但可以同时执行sayHelloToJoeJobDetail跟sayHelloToMikeJobDetail

@PersistJobDataAfterExecution 同样, 也是加在Job上,表示当正常执行完Job后, JobDataMap中的数据应该被改动, 以被下一次调用时用。

当使用@PersistJobDataAfterExecution 注解时, 为了避免并发时, 存储数据造成混乱, 强烈建议把 @DisallowConcurrentExecution注解也加上。

@DisallowConcurrentExecution

此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,

后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔[Interval(5秒)],

那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。

否则的话会等待任务执行完毕以后 再重新执行!(这样会导致任务的执行不是按照我们预先定义的时间间隔执行)

测试代码,这是官方提供的例子。设定的时间间隔为3秒,但job执行时间是5秒,设置@DisallowConcurrentExecution以后程序会等任务执行完毕以后再去执行,否则会在3秒时再启用新的线程执行

最新文章

  1. ABP框架 - 集成OWIN
  2. [DFNews] Blackbag发布MacQuisition 2013 R2
  3. 内嵌DB
  4. 【转】Java高手真经全套书籍分享
  5. Unity中小地图做法
  6. C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等
  7. [转]Hibernate重要规则总结
  8. Python【第七篇】面向对象进阶
  9. java中保留几位小数
  10. Smarty模板Windows下写代码 放到CentOS6.5无法正确解析
  11. 全面解析Bootstrap图片轮播效果
  12. 初入angular4——实际项目搭建总结
  13. Linux整合Apache和SVN
  14. DES加密实现的思想及代码
  15. PHP爬虫框架Beanbun使用
  16. Vue 系列之 基础入门
  17. PHP 中 var_export、print_r、var_dump 调试中的区别
  18. python2.7 环境配置
  19. Convolutional Neural Networks
  20. eclipse搭建struts2环境及所遇到的问题

热门文章

  1. [noip模拟]数字对&lt;RMQ&amp;二分&gt;
  2. 大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
  3. STL之vector常用函数笔记
  4. C Cow XOR 奶牛异或
  5. Coding 是门技术
  6. Linux系统安装java jdk
  7. ubuntu18.04配置宽带上网
  8. 19cRAC增删节点
  9. Node教程——API接口开发(MangoDB+Express)
  10. http的长连接和websocket的区别