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

对比分析 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.ContainerBase StartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBase StartChild.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.ContainerBase StartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBase StartChild.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.ContainerBase StartChild.call(ContainerBase.java:1575)atorg.apache.catalina.core.ContainerBase StartChild.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)

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值