如何在SpringBatch

时间:2016-07-18 17:53:31

标签: java spring hibernate spring-batch spring-transactions

我有一个用例,

  1. 从多个表(超过10000条记录)中读取批量记录
  2. 验证记录的业务逻辑
  3. 将经过验证的记录更新到除了在相同数据库中检索记录的位置之外的其他表。
  4. 我想用spring batch和scheduler来实现我的用例 某个时间点。

    我已阅读有关Spring批处理的内容,并了解有ItemReaderItemProcessorItemWriter作为块中的作业来执行活动。 我还想通过定义taskExecutor(org.springframework.core.task.SimpleAsyncTaskExecutor)使用多线程来实现它。我已经决定采用以下方法

    1. 通过使用ItemReader中的spring hibernate事务管理器调用其他模块中实现的DAO,从DB中读取带有查询的记录。
    2. ItemProcessor
    3. 中逐个处理记录
    4. 将记录更新为ItemWriter中的表,并提交一定数量的提交间隔。
    5. 我是Spring批处理新手所以我想了解这是否是一个很好的解决方案,或者是否有更好的方法来实现它。关于如何维护数据库连接和交易,我也几乎没有问题。

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

      如何通过多线程有效地处理上述用例,一次处理10个或20个线程的记录?

      有人可以提供一个简短的解释,以便更多地了解这个概念,或提供任何样本来了解更多?

      提前致谢。

1 个答案:

答案 0 :(得分:0)

你的方法听起来不错。

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

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

您可以拥有多个数据源和多个事务管理器,但管理它将很困难,因为您必须处理Spring批处理管理器可以自行完成的许多事情。 由于大多数Spring批处理操作(如Restart,stop等)需要元数据,这些元数据通过spring批处理存储在Db中。如果您尝试使用它,那么这些操作可能无法正常工作。

我建议您在同一数据源中同时使用spring批处理表和业务特定表。 这样,您只需要一个数据源和一个事务管理器,而不必担心可能遇到的事务问题。