Spring Quartz Task多次触发错误

时间:2015-06-18 06:17:35

标签: spring tomcat struts2 quartz-scheduler

我们在Struts2网络应用程序中安排了一个使用spring的Quartz作业,每天早上6点开始。我们遇到的问题是工作在早上6点开火4次。我们在旧版本的软件中运行相同的任务,没有任何问题。 2的唯一区别是运行正确运行Spring 3.05和Quartz 1.8.3,而较新版本运行Spring 3.2.13和Quartz 2.2.1。它们都运行在Tomcat 7和Java 1.7

以下是相关的web.xml代码段

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

相关的Spring配置是:

<bean name="dailyReminders"  class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.sample.SendReminderTask" />
    <property name="durability" value="true" />
    <property name="jobDataMap">
        <map>
            <entry key="patientService" value-ref="patientService" />
            <entry key="textService" value-ref="textService" />
        </map>
    </property>
</bean>

<bean id="dailyReminderTrigger"  class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="dailyReminders"/>
    <property name="cronExpression" value="0 0 6 * * ?"/>
</bean>

<bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
            <ref bean="dailyReminders" />
        </list>
    </property>

    <property name="triggers">
        <list>
            <ref bean="dailyReminderTrigger" />
        </list>
    </property>
</bean>

当我检查tomcat Servers.xml时,它只有一个主机,我知道这是其他主机的问题。任何帮助将不胜感激。

更新 我刚看了一下最新的日志,发现了这个条目:

Exception in thread "org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread" java.lang.NoClassDefFoundError: org/quartz/DisallowConcurrentExecution
at org.quartz.impl.JobDetailImpl.isConcurrentExectionDisallowed(JobDetailImpl.java:388)
at org.quartz.simpl.RAMJobStore.acquireNextTriggers(RAMJobStore.java:1428)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:272)


Caused by: java.lang.ClassNotFoundException: org.quartz.DisallowConcurrentExecution
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
... 3 more

我检查了这个类在包含的库中,我在服务器上找不到任何其他石英罐。我不知道为什么它会抛出错误。它与Spring不兼容吗?

**更新2:**当tomcat启动时,我在catalina.out日志中看到以下内容

Jun 23, 2015 5:05:38 AM org.springframework.context.support.DefaultLifecycleProcessor start
INFO: Starting beans in phase 2147483647
Jun 23, 2015 5:05:38 AM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now
.
.
.
Jun 23, 2015 5:05:39 AM org.springframework.context.support.DefaultLifecycleProcessor start
INFO: Starting beans in phase 2147483647
Jun 23, 2015 5:05:39 AM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now
.
.
.
Jun 23, 2015 5:05:43 AM org.springframework.context.support.DefaultLifecycleProcessor start
INFO: Starting beans in phase 2147483647
Jun 23, 2015 5:05:43 AM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now

为什么调度程序会在几秒钟内启动三次?

这让我疯了,任何帮助都会如此受到赞赏。

0 个答案:

没有答案