有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring批处理如何从postgres读取数据,然后在步骤中写入数据

在网上找不到任何示例,但我试图做的基本上是使用JavaSpringBatch在postgres中读取整个表,然后针对每一行,将数据发布到其他地方。我读了https://spring.io/guides/gs/batch-processing/,但不知道怎么做。我还想为数据检索留出空间,这样我的数据库就不会被阻塞。有很多从csv文件读取的示例,但是找不到如何从存储库读取


共 (2) 个答案

  1. # 1 楼答案

    Couldn't find any examples online

    你看到这里的官方样品了吗:https://github.com/spring-projects/spring-batch/tree/master/spring-batch-samples

    有许多示例演示了如何从数据库中读取数据:

    what I'm trying to do is basically use Java Spring Batch to read in a whole table in postgres and then for each row, publish that data elsewhere.

    前面示例中的所有作业都至少有一个步骤可以从数据库中读取数据并将其写入其他位置

    I also want to space out the data retrieval so my database doesn't get blocked up

    我建议使用一个分页项读取器(参见https://docs.spring.io/spring-batch/4.0.x/reference/html/readersAndWriters.html#pagingItemReaders)读取页面中的数据,而不是在整个表上打开光标

  2. # 2 楼答案

    要读取该表,需要使用Spring批处理提供的一个读卡器——使用-org.springframework.batch.item.data.RepositoryItemReaderorg.springframework.batch.item.database.JdbcPagingItemReader

    两个读卡器都实现了分页,因此您的数据库阅读会逐页进行&;并不是整张桌子都能一次读到

    RepositoryItemReadersetPageSize(int pageSize)方法,在JdbcPagingItemReader中也有类似的方法。表中必须有一列,可以在该列上进行排序以实现分页

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

    这些读者将阅读一次页面,将其保存在内存中,并处理单个项目,直到达到块大小;然后就发生了。直到一页完全完成,才能进行下一次数据库读取。通常,为了获得最佳性能,区块大小需要比页面大小小几倍,例如读卡器页面大小-1000&;chunk size=100,因此1000个项目将被读取一次,并以100-100个项目的块提交

    下一次DB读取发生在前1000次读取全部传递给处理器时

    then for each row, publish that data elsewhere

    为了完成上述任务,您必须将chunk size设置为1,然后在writer中,您可以做任何您想做的事情,这样您的事务将被提交给每个项目