Quartz JDBC Job Store未运行作业

时间:2014-02-05 18:36:20

标签: java spring jdbc quartz-scheduler

我有一个带有Spring实现的石英,它在一个独立的环境中运行良好,我现在正在转移到集群环境。我正在利用JDBC支持的作业存储来协调Quartz。对于我的生活,当我连接它的数据库方面时,我似乎无法使它工作。要进行初始设置,我按照说明here进行操作,我的应用程序上下文如下所示:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="configLocation" value="classpath:quartz.properties"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="transactionManager" ref="txManager"/>


        <property name="schedulerName" value="ClusteredScheduler"/>


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

        <property name="autoStartup" value="true"/>
        <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
        <property name="jobFactory">
          <bean class="com.project.scheduling.persistence.AutowiringSpringBeanJobFactory"/>
        </property>
        <property name="jobDetails">
            <list>
                <ref bean="shipNoticeJob" />
                <ref bean="idleDeviceJob" />
                <ref bean="distanceJob" />
                <ref bean="deviceMaintenanceJob" />
            </list>
        </property>

        <property name="triggers">
            <list>
                <ref bean="shipNoticeCronTrigger" />
                <ref bean="idleDeviceTrigger" />
                <ref bean="distanceTrigger" />
                <ref bean="deviceMaintenanceTrigger" />

            </list>
        </property>
    </bean>

AutowiringBeanFactory基本上与教程中的quartz.properties完全相同。

我的# Needed to manage cluster instances org.quartz.scheduler.instanceId=AUTO org.quartz.scheduler.instanceName=ClusteredScheduler # org.quartz.jobStore.useProperties=true org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = true # Change this to match your DB vendor #org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true org.quartz.scheduler.wrapJobExecutionInUserTransaction=true #org.quartz.threadPool.threadCount = 3 #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 文件在这里:

quartz.properties

我知道此文件位于类路径中并包含在此文件的更改中会影响作业是否实际触发。这个文件的最后两行是我在&#34;独立环境中使用的配置&#34;完美的工作。此外,当使用独立版本时,应用程序上下文的当前内容也起作用。 (显然,某些属性没有任何意义,因为它们适用于数据库支持的作业存储而不是RAM作业存储。)

当我在最后两个文件中注释掉<logger name="org.quartz"> <level value="trace"/> <appender-ref ref="file" /> 文件中的所有行时,一切都按预期工作。但是,在当前的实现中,运行的非作业和数据库中的触发器都不会触发。

思想?

编辑根据有关日志记录的问题,我添加了

<category name="org.quartz">
  <priority value="trace"/>
  <appender-ref ref="file" />

然后当没有产生输出时,我尝试了

{{1}}

两者都没有产生任何记录输出......

1 个答案:

答案 0 :(得分:0)

终于弄明白了。最终的问题是我使用的石英2.1.6 jar和2.2.0的模式。也就是说,更大的问题是因为Quartz使用SLF4j而不是Commons Logging的Log4J,我需要在我的类路径上使用SLF4j Log4J绑定jar,这是我没有的。结果,所有错误都被吞下,因为没有任何日志记录语句进入日志文件。令人惊讶的是,当您看到错误消息时会发生什么!