Java Quartz Spring 交易支持
Java Quartz Spring transaction support
我需要在 Quartz 作业详细信息 bean 中编写数据库逻辑。我可以在没有任何明确声明的情况下这样做吗,或者如何正确地做到这一点以确保它在事务中运行?
最好举个例子,但我建议您只需将 @Transactional
添加到 运行 的方法中即可。应该可以了。
看来您想将 Quartz 作业执行包装在全局事务中,以符合对另一个数据库的某些事务操作。
根据 Quartz 文档 here,您基本上必须:
- 使用
JobStoreCMT
或其子类作为 Quartz 作业存储(例如 Spring 中的 LocalDataSourceJobStore
);
- 将
org.quartz.scheduler.wrapJobExecutionInUserTransaction
设为真;
- 在您自己的代码中以 JTA 方式管理事务。
通常,对于上面的最后一步,如果您使用 Spring,您可以简单地:
- 用
@Transactional
标记job.execute()
;
- 将两个事务管理器(Quartz 的和您自己的数据库的)链接在一起,就像 here;
我需要在 Quartz 作业详细信息 bean 中编写数据库逻辑。我可以在没有任何明确声明的情况下这样做吗,或者如何正确地做到这一点以确保它在事务中运行?
最好举个例子,但我建议您只需将 @Transactional
添加到 运行 的方法中即可。应该可以了。
看来您想将 Quartz 作业执行包装在全局事务中,以符合对另一个数据库的某些事务操作。
根据 Quartz 文档 here,您基本上必须:
- 使用
JobStoreCMT
或其子类作为 Quartz 作业存储(例如 Spring 中的LocalDataSourceJobStore
); - 将
org.quartz.scheduler.wrapJobExecutionInUserTransaction
设为真; - 在您自己的代码中以 JTA 方式管理事务。
通常,对于上面的最后一步,如果您使用 Spring,您可以简单地:
- 用
@Transactional
标记job.execute()
; - 将两个事务管理器(Quartz 的和您自己的数据库的)链接在一起,就像 here;