对比分析 quartz1.6x、1.7x、1.8x 使用配置

quartz调用框架1.6x、1.7x、1.8x 使用时,所需配置却不同,今天拿出来分别对比分析一下。

副标题【论版本管理的重要性】
今天整理项目发现项目在本地运行不执行相应job,经过各种查发现quartz 的不同版本的配置文件还不一样。quartz所用到的配置文件共计3个主要的,分别是:quartz.properties、quartz_jobs.xml 以及在web.xml 文件设置的servlet 。
今天版本配置的不同就是针对前两个配置文件。

首先分析1.6.4

(老项目没经过maven管理,项目用的拷贝jar包的方式,项目本身用到的quartz的jar 版本是:quartz-all-1.6.4.jar )
第一步:quartz.properties
“`
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.**fileName=**quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

    注意上文中的  fileName,这个仅在1.6.4中可以使用,到了其他版本就不一定叫做这个名字了,下文中也会提到,并做标注字体加粗。第二步:quartz_jobs.xml```
<?xml version='1.0' encoding='utf-8'?>
<quartz><job><job-detail><name>cnlive</name><group>cnlive_job</group><job-class>test.quartz.quartz1.App</job-class></job-detail><trigger><cron><name>cron_job</name><group>cron_job</group><job-name>job1</job-name><job-group>job1</job-group><cron-expression>*/2 * * * * ?</cron-expression></cron></trigger></job>
</quartz>  

分析1.7, 1.7.x和1.6 的区别

仅仅是 fileName 不同,由fileName改为了 fileNames,如下:
第一步:对比quartz.properties

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileNames=quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

第二步:对比quartz_jobs.xml

<?xml version='1.0' encoding='utf-8'?>
<quartz><job><job-detail><name>cnlive</name><group>cnlive_job</group><job-class>test.quartz.quartz1.App</job-class></job-detail><trigger><cron><name>cron_job</name><group>cron_job</group><job-name>job1</job-name><job-group>job1</job-group><cron-expression>*/2 * * * * ?</cron-expression></cron></trigger></job>
</quartz>  

由此可看出1.6.x和 1.7.x 在quartz_jobs.xml 文件配置上是没有任何区别的可以通用。

分析1.8.x 和 1.6.、1.7 的对比

 可以说从1.8开始quartz进行了比较大的改动,quartz_jobs.xml  和 quartz.properties 的配置和之前版本都有很大不同。

老样子第一步:quartz.properties

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames=quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

第二步:quartz_job.xml, 配置也和之前的版本不同。


<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data
    xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"version="1.8"><schedule><job><name>DemoJob</name><group>JobGroup</group><job-class>test.quartz.quartz2.App</job-class></job><trigger><cron><name>DemoTrigger</name><group>triggerGroup</group><job-name>DemoJob</job-name><job-group>JobGroup</job-group><cron-expression>0/2 * * * * ?</cron-expression></cron></trigger></schedule>
</job-scheduling-data>

为了证实以上结论,我们看一下 jar包内的类是否确实如此:

我们可以看到1.8开始确实有很大改动。

如果你开发过程中遇到了如下异常,毫无疑问是你的版本问题,请检查你用的jar包的版本和对应是配置文件吧。

异常举例:

信息: QuartzInitializer: Quartz Scheduler failed to initialize: org.quartz.SchedulerException: SchedulerPlugin class ‘org.quartz.plugins.xml.JobInitializationPlugin’ could not be instantiated. [See nested exception: java.lang.ClassNotFoundException: org.quartz.plugins.xml.JobInitializationPlugin]
四月 15, 2016 4:46:00 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet [QuartzInitializer] in web application [/quartz2] threw load() exception
java.lang.ClassNotFoundException: org.quartz.plugins.xml.JobInitializationPlugin
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.quartz.simpl.InitThreadContextClassLoadHelper.loadClass(InitThreadContextClassLoadHelper.java:72)
at org.quartz.simpl.CascadingClassLoadHelper.loadClass(CascadingClassLoadHelper.java:114)
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1007)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1432)
at org.quartz.ee.servlet.QuartzInitializerServlet.init(QuartzInitializerServlet.java:190)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5266)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5554)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)


java.lang.NoSuchMethodException: No setter for property ‘overWriteExistingJobs’
at org.quartz.impl.StdSchedulerFactory.setBeanProps(StdSchedulerFactory.java:1320)
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1016)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1432)
at org.quartz.ee.servlet.QuartzInitializerServlet.init(QuartzInitializerServlet.java:190)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5266)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5554)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)


严重: Servlet [QuartzInitializer] in web application [/quartz2] threw load() exception
java.lang.NoSuchMethodException: No setter for property ‘fileName’
at org.quartz.impl.StdSchedulerFactory.setBeanProps(StdSchedulerFactory.java:1320)
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1016)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1432)
at org.quartz.ee.servlet.QuartzInitializerServlet.init(QuartzInitializerServlet.java:190)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5266)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5554)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

总计,开发是个细心和耐心的过程,一不留神就容易看见红色(异常)

java 调用Quartz 不同版本使用分析 1.6x 、1.7x、1.8x相关推荐

  1. Java调用百度AI实现人体属性分析

    Java调用百度AI实现人体属性分析 好久没有更新了...闲来无事发一下模仿百度AI的人体属性分析. 百度AI效果图如下: 本人开发效果图如下: 界面大家可以忽略........下面讲讲代码实现 1. ...

  2. Windows下的Matlab与Java的混合编程,Java调用matlab编译的jar包(linux下请看我另外版本!)

    近来因为甲方需要做拟合等功能,需要用到matlab软件,并将其功能在java中实现,然后在服务器上也要实现,因为之前根本没有听说过,所以我苦心泣血,狂干一星期找到了,踩了无数个坑,终于实现了,因此想分 ...

  3. java调用云小蜜示例教程(调用sdk版本)

    最近又用java写了云小蜜的调用教程,这里总结一下,首先maven依赖为: <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-j ...

  4. 渗透测试-Fastjson各版本漏洞分析(下)

    - fastjson 1.2.45 - 1.2.44中对[进行了判断,我们用1.2.43的POC,然后下个JSONException的异常断点,看看是怎么判断的 运行后,在com.alibaba.fa ...

  5. java不支持发行版本12_主要发行版本后Java开发人员应使用的15种工具

    java不支持发行版本12 新部署的生存工具包:适用于Java开发人员的工具,这些工具经常将代码部署到生产中! Takipi会检测生产中的所有错误,并像发生错误时一样显示变量值 立即部署并获得免费的T ...

  6. .net core 引用jar_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  7. JAVA进阶day07JNI(java调用c)A部分

    目前接触的JNI有java调用c和c调用java两类.其中java调用c又有隐式和显示两种映射关系.本笔记针对java调用c的显示映射.本着工程实际够用的原则,不够再回头来补充. JAVA访问c库需要 ...

  8. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  9. java并发包线程池原理分析锁的深度化

    java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素 ...

最新文章

  1. 认真推荐8个功能强大的实用网站,备受好评!
  2. Java数据结构和算法:234树和外部存储
  3. svm学习之线性部分总结
  4. VTK:模型之ContourTriangulator
  5. .NET分布式大规模计算利器-Orleans(一)
  6. Android之Bitmap高效缓存以及android缓存策略
  7. 拿什么拯救你,我的面试之——从零打卡刷Leetcode(No.003)
  8. 【算法系列之七】合并两个有序链表
  9. 潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)
  10. Tensorflow并行计算:多核(multicore),多线程(multi-thread),计算图分割(Graph Partition)
  11. 模数转换实验中断方式c语言,DSP实验报告--模拟信号的AD+FFT变换
  12. 2.图像作为函数 | 标量、函数、混合图像_6
  13. linq结果转换object_19.07.26 JS 里的数据类型转换amp;普通类型和对象的区别
  14. 计算机网络配置vlan实验报告,北京理工大学-计算机网络实践-VLAN配置及VLAN间通信实验报告...
  15. 网络拓扑图及企业网络设计基本流程
  16. 微信公众平台订阅号如何升级为服务号?
  17. STM32F103硬件SPI驱动ADS1256
  18. openGL参数曲面----二次贝塞尔曲线
  19. STM32F103与电脑端通信(使用NRF24L01)
  20. java chmod 777_chmod 777 修改权限

热门文章

  1. OpenShift简介
  2. 电池容量的使用时间计算
  3. 微软云助力 2020 中国开源年会 暨 阿帕奇中国路演
  4. 深度强化学习系列(一):强化学习概述
  5. HBase的网络页登录配置
  6. 越南疯狂翻拍中国电视剧:看越南版杨过小龙女雷死中国人
  7. LevelDB库简介
  8. 杀死excel所有进程
  9. 入门学习C++的一点讨论
  10. 进入mysql总是显示错误代码_打开mysql管理弹出错误代码这个怎么解决