adi*_*adi 5 spring hibernate jpa quartz-scheduler
我使用石英、Spring 和 Hibernate 作为 JPA 提供程序。数据库是甲骨文。
我有一种方法可以将文件写入文件系统并使用详细信息更新数据库。可以通过两种方式调用此方法:
我已将石英设置为:
<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>
这种方法是使用 spring 管理的事务。
问题是当这个方法被石英调度器调用时,文件被创建但数据库没有更新(应该有两个表更新和一个表插入)。
我也启用了 hibernate show_SQL,但在调度程序的情况下,不会记录更新\插入语句。
尽管当 Web 服务请求调用此方法时,这可以正常工作。日志也显示更新\插入语句。
更新 1
总结我的问题,这就是我想要实现的目标:
最后,我希望所有表格都得到更新。
当石英触发作业时,除第 6 点外,一切正常。代码是正确的,因为当我使用 Web 服务调用调用此方法时,表正在更新。
更新 2
我更新了要使用的代码
<prop key="org.quartz.jobStore.class">org.springframework.scheduling.quartz.LocalDataSourceJobStore</prop>
但这也无济于事。
请帮忙。谢谢。阿迪
Quartz 在它自己的上下文中运行,即使是由 Spring 便捷方法启动的,所以实际上您最终不会获得整个 Spring 应用程序上下文,除非您显式地传入JobDataMapbean(请参阅http://forum.springsource)。 org/showthread.php?76974-Why-autowired-doesn-t-work-on-a-QuartzJobBean-bean)。因此,您可以传入 Spring 管理的 bean,但如果您不需要 Quartz 的全部功能,那么这一切似乎都有点混乱。
如果您的调度需求不是那么复杂,您可能需要考虑使用@ScheduledSpring 注释(请参阅此处),因为整个方法调用将在 Spring 上下文中本地发生,然后您的事务将像在 Web 服务中一样工作称呼。
| 归档时间: | 
 | 
| 查看次数: | 6584 次 | 
| 最近记录: |