Я использую кварц, Spring with Hibernate, как поставщик JPA. База данных - это Oracle.Кварц с пружиной, не совершающий
У меня есть метод, который записывает файл в файловую систему и обновляет базу данных с подробностями. Этот метод может быть вызван двумя способами:
- Использование веб-службы
- Или, как запланированная quatrz работу.
Я настроил кварц, как:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" scope="singleton">
<property name="autoStartup" value="true"/>
<property name="waitForJobsToCompleteOnShutdown" value="true"/>
<property name="overwriteExistingJobs" value="true"/>
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">FileScheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.jobStore.misfireThreshold">6000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">${driverDelegateClass}</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
</props>
</property>
</bean>
Этот метод использует пружинный управляемую транзакцию.
Проблема в том, когда этот метод вызывается планировщиком кварца, файл создается, но база данных не обновляется (должны быть обновлены две таблицы и одна вставка таблицы).
Я также включил hibernate show_SQL, но в случае планировщика никаких операторов update \ insert не регистрируются.
Хотя это отлично работает, когда этот метод вызывается запросом веб-службы. Журнал показывает update \ insert.
UPDATE 1
Резюмируя мою проблему, это то, что я пытаюсь достичь:
- Создать новую запись в таблице сотрудников.
- Сохраните employee_id в job_store (кварце).
- При срабатывании триггера кварц возвращает employee_id
- Извлеките (загрузите) запись сотрудника на основе этого ключа.
- Отправить Работнику уведомления по электронной почте
- Update Уведомление со статусом, как «Отправленные» (вставить заявление)
В конце концов, я надеюсь, что все таблицы должны быть обновлены.
Когда кварц запускает задание, все работает кроме пункта 6. Код верен, так как при вызове этого метода с помощью вызова веб-службы таблица обновляется.
UPDATE 2
Я обновил код, чтобы использовать
<prop key="org.quartz.jobStore.class">org.springframework.scheduling.quartz.LocalDataSourceJobStore</prop>
, но это также doest'nt помощь.
Пожалуйста, помогите. Благодарю. Adi
спасибо, но задания получают правильно из базы данных планировщиком. JobMap содержит primayKey таблицы «User», а класс User заполняется после вызова загрузки с помощью этого ключа. Это «слияние» не работает. Вот почему я сказал, что не вижу «вставить» SQL в журналы. Я могу видеть все правильные выражения «select». – adi
Я согласен с Aaron, но если вы все еще хотите использовать кварц, убедитесь, что Entitymanager правильно передан в кварцевую работу. – ayengin