Я пытаюсь использовать JDBC Job Store в Кварце со следующим кодом:
DateTime dt = new DateTime().plusHours(2);
JobDetail jobDetail = new JobDetail(identifier, "group", TestJob.class);
SimpleTrigger trigger = new SimpleTrigger(identifier, dt.toDate());
trigger.setJobName(identifier);
trigger.setJobGroup("group");
quartzScheduler.addJob(jobDetail, true);
quartzScheduler.scheduleJob(trigger);
И я настраиваю планировщик следующим образом:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<property name="autoStartup" value="true" />
<property name="waitForJobsToCompleteOnShutdown" value="false" />
<property name="dataSource" ref="schedulerDataSource" />
<property name="nonTransactionalDataSource" ref="nonTXdataSource" />
<property name="quartzProperties">
<props>
<!--Job Store -->
<prop key="org.quartz.jobStore.driverDelegateClass">
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
</prop>
<prop key="org.quartz.jobStore.class">
org.quartz.impl.jdbcjobstore.JobStoreCMT
</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
</props>
</property>
</bean>
schedulerDataSource
- это стандартный источник данных JNDI, nonTXdataSource
настроен с помощью простого org.springframework.jdbc.datasource.DriverManagerDataSource
. Я указал класс хранилища заданий: o rg.quartz.impl.jdbcjobstore.JobStoreCMT
и надеялся, что код:
quartzScheduler.addJob(jobDetail, true);
quartzScheduler.scheduleJob(trigger);
не будет фиксировать задание в базе данных при вызове каждого метода. Обычно, когда я вызываю addJob, задание немедленно сохраняется в базе данных, метод scheduleJob вызывает немедленное сохранение информации о триггере в базе данных, но это обычно происходит уже через две отдельные транзакции.
В коде присутствует довольно много последующей логики, которую необходимо зафиксировать в базе данных вместе с запланированными заданиями в одной транзакции, однако, независимо от того, что я пробую, задания планируются в базу данных, как только они методы называются. Я пробовал в различных средах Тестирование / Tomcat / Glassfish и различные конфигурации источников данных, но безрезультатно.
Может ли кто-нибудь указать мне, куда я иду не так?
Спасибо.