gpt4 book ai didi

spring - Quartz 与 Spring 未提交

转载 作者:行者123 更新时间:2023-12-01 06:40:38 24 4
gpt4 key购买 nike

我使用 quartz 、Spring 和 Hibernate 作为 JPA 提供程序。数据库是甲骨文。

我有一种方法可以将文件写入文件系统并使用详细信息更新数据库。
可以通过两种方式调用此方法:

  • 使用网络服务
  • 或者,作为预定的 quatrz 作业。

  • 我已将 quartz 设置为:
    <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 管理的事务。

    问题是当这个方法被 quartz 调度器调用时,文件被创建但数据库没有更新(应该有两个表更新和一个表插入)。

    我也启用了 hibernate show_SQL,但在调度程序的情况下,不会记录更新\插入语句。

    尽管当 Web 服务请求调用此方法时,这可以正常工作。日志也显示更新\插入语句。

    更新 1

    总结我的问题,这就是我想要实现的目标:
  • 在员工表中创建一条新记录。
  • 将employee_id 保存在job_store( quartz )中。
  • 当触发器被触发时,quartz 返回employee_id
  • 根据此键检索(加载)员工记录。
  • 给员工发邮件
  • 更新状态为“已发送”的通知(插入语句)

  • 最后,我希望所有表格都得到更新。

    当 quartz 触发作业时,一切正常 除了第 6 点 .
    代码是正确的,因为当我使用 Web 服务调用调用此方法时,表正在更新。

    更新 2

    我更新了要使用的代码
    <prop key="org.quartz.jobStore.class">org.springframework.scheduling.quartz.LocalDataSourceJobStore</prop>

    但这也无济于事。

    请帮忙。谢谢。
    阿迪

    最佳答案

    Quartz 运行在它自己的上下文中,即使是由 Spring 便利方法启动的,所以你实际上并没有得到整个 Spring 应用程序上下文,除非你明确地在 JobDataMap传入 bean(见 http://forum.springsource.org/showthread.php?76974-Why-autowired-doesn-t-work-on-a-QuartzJobBean-bean)。因此,您可以传入 Spring 管理的 bean,但是如果您不需要 Quartz 的全部功能,这一切似乎有点困惑。

    如果您的日程安排需求不是那么复杂,您可能需要考虑使用 @Scheduled Spring 注释 ( see here ),因为整个方法调用在 Spring 上下文中本地发生,然后您的事务将像在 Web 服务调用中一样工作。

    关于spring - Quartz 与 Spring 未提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801048/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com