我正在使用石英、Spring 和 Hibernate 作为 JPA 提供程序。数据库是甲骨文。
我有一种将文件写入文件系统并使用详细信息更新数据库的方法。该方法可以通过两种方式调用:
- 使用网络服务
- 或者,作为预定的 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,但是在调度程序的情况下,没有更新\插入语句被记录。
尽管当 Web 服务请求调用此方法时,这可以正常工作。日志也显示 update\insert 语句。
更新 1
总结一下我的问题,这就是我想要实现的目标:
- 在员工表中创建一条新记录。
- 将employee_id 保存在job_store(石英)中。
- 当触发触发时,quartz 会返回employee_id
- 根据此键检索(加载)员工记录。
- 向员工发送电子邮件
- 更新状态为“已发送”的通知(插入语句)
最后,我希望所有的表都会更新。
当石英触发工作时,除了第 6 点外,一切都在工作。代码是正确的,因为当我使用 Web 服务调用调用此方法时,表正在更新。
更新 2
我更新了要使用的代码
<prop key="org.quartz.jobStore.class">org.springframework.scheduling.quartz.LocalDataSourceJobStore</prop>
但这也无济于事。
请帮忙。谢谢。阿迪