繁体   English   中英

Java Spring Batch如何从Postgres中读取然后在步骤中写入数据

[英]Java Spring Batch how to read from postgres and then write data in step

在网上找不到任何示例,但是我想做的基本上是使用Java Spring Batch在postgres中读取整个表,然后针对每一行,将该数据发布到其他地方。 我读了https://spring.io/guides/gs/batch-processing/,但不知道该怎么做。 我还想扩展数据检索的空间,以免数据库被阻塞。 有许多示例从csv文件读取,但是找不到从存储库中读取的方法。

要读取该表,您需要使用Spring Batch提供的阅读器之一-使用org.springframework.batch.item.data.RepositoryItemReaderorg.springframework.batch.item.database.JdbcPagingItemReader

两个阅读器都实现了分页,因此您的数据库读取是逐页进行的,而不是整个表都一次被读取。

RepositoryItemReader具有setPageSize(int pageSize)方法,并且JdbcPagingItemReader也存在类似的方法。 表中必须有一列可以对其进行排序以实现分页。

尝试使用这两个阅读器查找代码示例。

这些阅读器将阅读一次页面,将其保存在内存中,并处理单个项目直到达到块大小然后进行提交。 在一页完全完成之前,不会进行下一个DB读取。 通常,为了获得最佳性能,块大小需要比页面大小小几倍,例如读取器页面大小-1000&块大小= 100,因此将读取1000个项目,并以100-100个项目的大小提交。

当前一千次读取全部传递到处理器时,将发生下一次DB读取。

然后将每一行的数据发布到其他位置

要完成上述任务,您必须将块大小设置为1,然后在writer中,您可以执行任何您想做的事情,这样就可以为每个项目提交事务。

找不到在线示例

您是否在这里看到了官方样本: https//github.com/spring-projects/spring-batch/tree/master/spring-batch-samples

有许多示例说明了如何从数据库读取数据:

我想要做的基本上是使用Java Spring Batch在postgres中读取整个表,然后对于每一行,将该数据发布到其他位置。

先前示例中的所有作业都至少具有一个步骤,该步骤从数据库读取数据并将其写入其他位置。

我也想扩大数据检索的空间,以免数据库被阻塞

我建议使用其中一个分页项读取器(请参阅https://docs.spring.io/spring-batch/4.0.x/reference/html/readersAndWriters.html#pagingItemReaders )读取页面中的数据而不打开游标在整个桌子上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM