【发布时间】:2016-07-18 17:53:30
【问题描述】:
我有一个用例,例如,
- 从多个表中读取批量记录(超过10000条记录)
- 验证记录的业务逻辑
- 将经过验证的记录更新到其他表,而不是在同一数据库中检索记录的位置。
我想使用 Spring Batch 和调度程序来实现我的用例以运行 某个时间点。
我已阅读有关 Spring Batch 的信息,并了解有一个 ItemReader、ItemProcessor 和 ItemWriter 作为块中的作业来执行活动。
我也想通过定义taskExecutor(org.springframework.core.task.SimpleAsyncTaskExecutor)来使用多线程来实现它。我决定采用以下方法
- 使用
ItemReader中的spring hibernate 事务管理器调用其他模块中实现的DAO,通过查询从DB 中读取记录。 - 在
ItemProcessor中一次处理每个记录 - 将记录更新到
ItemWriter中的表,提交间隔为某个数字。
我是 Spring 批处理的新手,所以我想了解这是否是一个很好的实现解决方案,或者是否有更好的方法来实现它。关于如何维护数据库连接和事务,我也有一些疑问。
整个批处理作业是否只有一个连接和事务?还是会在某些执行点打开多个连接和事务?这个过程将如何处理?
如何有效地使用多线程处理上述用例以一次处理10或20个线程的记录?
有人可以提供一个简短的解释来了解更多关于这个概念或提供任何示例来了解更多吗?
提前致谢。
【问题讨论】:
标签: java spring hibernate spring-batch spring-transactions