Кварц 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, которого у меня не было. В результате все ошибки проглатывались, потому что ни один из операторов журналирования не попал в файлы журналов. Удивительно, что происходит, когда вы можете увидеть сообщения об ошибках!