Кварц JDBC Job Store не работает

У меня есть кварц с реализацией Spring, который отлично работал в автономной среде, которую я сейчас перехожу в кластерную среду. Я использую магазины заданий, поддерживаемые JDBC, для координации Quartz. На мой взгляд, я не могу заставить его работать, когда подключаю его к базе данных. Чтобы выполнить первоначальную настройку, я следовал приведенным здесь инструкциям, и контекст моего приложения выглядит следующим образом:

<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 файл, кроме двух последних, все работает как положено. Однако в текущей реализации ни одно из запущенных заданий и ни один из триггеров в базе данных никогда не срабатывают.

Мысли?

Изменить На вопрос о входе в систему я добавил

<logger name="org.quartz">
  <level value="trace"/>
  <appender-ref ref="file" />

а потом, когда это не произвело никакого выхода, я попытался

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

Ни один из них не произвел ЛЮБОГО вывода журнала...

1 ответ

Решение

Наконец-то понял это. Конечная проблема заключалась в том, что я использовал кварцевую банку 2.1.6 со схемой из 2.2.0. Тем не менее, большая проблема заключалась в том, что, поскольку Quartz использует SLF4j вместо Log4J Commons Logging, мне понадобился баночка привязок SLF4j Log4J на моем classpath, которого у меня не было. В результате все ошибки проглатывались, потому что ни один из операторов журналирования не попал в файлы журналов. Удивительно, что происходит, когда вы можете увидеть сообщения об ошибках!

Другие вопросы по тегам