gpt4 book ai didi

java - Spring Batch 中如何维护数据库连接和事务

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:25 25 4
gpt4 key购买 nike

我有一个用例,例如,

  1. 从多个表中读取批量记录(超过10000条记录)
  2. 验证记录的业务逻辑
  3. 将已验证的记录更新到与在同一数据库中检索记录的表不同的表中。

我想使用 Spring Batch 和调度程序来实现我的用例以运行某个时间点。

我已阅读有关 Spring Batch 的内容,并了解有一个 ItemReaderItemProcessorItemWriter 作为 block 中的作业来执行 Activity 。另外,我想通过定义 taskExecutor(org.springframework.core.task.SimpleAsyncTaskExecutor) 使用多线程来实现它。我决定采用以下方法

  1. 使用 ItemReader 中的 spring hibernate 事务管理器调用其他模块中实现的 DAO,通过查询从数据库中读取记录。
  2. ItemProcessor 中一次处理每个记录
  3. 将记录更新到 ItemWriter 中的表中,提交间隔为某个数字。

我是 Spring 批处理新手,所以我想了解这是否是一个很好的实现解决方案,或者是否有更好的方法来实现它。关于如何维护数据库连接和事务,我也有几个问题。

整个批处理作业是否会有一个连接和事务?或者是否会在某些执行点打开多个连接和事务?这个过程将如何处理?

如何使用多线程有效处理上述用例,以一次使用 10 个或 20 个线程处理记录?

有人可以提供一个简短的解释来了解更多这个概念或提供任何示例来了解更多吗?

提前致谢。

最佳答案

我觉得你的方法不错。

我会尽力回答你的第一个问题。

整个批处理作业是否会有一个连接和事务?或者是否会在某些执行点打开多个连接和事务?这个过程将如何处理?

您可以拥有多个数据源和多个事务管理器,但管理起来会很困难,因为您必须处理 Spring Batch Manager 自己可以完成的许多事情。由于大多数 Spring Batch 操作(例如重新启动、停止等)都需要由 Spring Batch 存储在 Db 中的元数据。如果您尝试使用它,那么这些操作可能不会很好地工作。

我建议您将 Spring Batch 表和您的业务特定表放在同一数据源中。这样一来,您只需要一个数据源和一个事务管理器,并且不必担心可能遇到的事务问题。

关于java - Spring Batch 中如何维护数据库连接和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443066/

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