如何使用Spring-Batch读取id列分块的csv行?

成员之声

Spring-Batch用来读取csv文件,格式化内容并将其写入数据库,例如:

StepBuilder<T, T> builder = stepBuilderFactory.get("step")
    .<T, T>chunk(100)
    .reader(flatFileItemReader)
    .processor(processor)
    .writer(jpaItemWriter);

csv包含一个ID列。如何修改,reader以基于该ID的块?考试:

#id, #value
1, first
1000, second
1001, second
1005, second

在这种情况下,块将仅读取第一行,然后提交,然后继续。

是否可以通过文件中的值应用分块?

卢卡·巴索·里奇(Luca Basso Ricci)

我使用自定义的CompletionPolicyPeekableItemReader进行了相同操作
代码背后的想法是偷看下一个项目,从下一个元素中读取perper,并检查值的变化。
发生值更改时,true返回CompletionPolicy.isComplete()

重要提示:此策略必须注册为步骤侦听器!

public class BreakKeyCompletionPolicy extends CompletionPolicySupport{
    private BreakKeyCompletionContext cc;
    private PeekableItemReader<Object> reader;
    // Strategy used to check for value break
    private BreakKeyStrategy<Object> strategy;

    public void setReader(PeekableItemReader<Object> forseeingReader){
        this.reader = forseeingReader;
    }

    @Override
    public boolean isComplete(RepeatContext context){
        return this.cc.isComplete();
    }

    @Override
    public RepeatContext start(RepeatContext context)   {
        context.setAttribute("current", null);
        this.cc = new BreakKeyCompletionContext(context);
        return cc;
    }
    /** Context contains current element ("current" property" and manage next element.
     * Null next element is treated as a key break
     */
    protected class BreakKeyCompletionContext extends RepeatContextSupport {
        public BreakKeyCompletionContext(RepeatContext context)     {
            super(context);
        }
        public boolean isComplete(){
            final Object next;
            try{
                next = reader.peek();
            }
            catch (Exception e){
                throw new NonTransientResourceException("Unable to peek", e);
            }
            if (null == next){
                return true;
            }
            return strategy.isKeyBreak(this.getAttribute("current"), next);
        }
    }

    @AfterRead
    public void afterRead(Object item){
        this.cc.setAttribute("current", item);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用基于Java的配置来配置Spring Batch StepScope?

来自分类Dev

如何使用Spring从资源中读取查询?

来自分类Dev

如何使用Spring Batch读取简单的XML列表?

来自分类Dev

如何使用csvHelper读取csv文件中的第二行

来自分类Dev

如何使用Spring Batch查看集群中的所有作业?

来自分类Dev

如何使用Spring Integration逐行读取文件

来自分类Dev

如何使用Spring Batch解析CSV(包含逗号的值)

来自分类Dev

如何使用ThreadPoolTaskScheduler动态调度Spring Batch作业

来自分类Dev

如何使用Spring Controller从URL读取文件?

来自分类Dev

如何使用批注在Spring Batch中运行多个作业

来自分类Dev

如何与Spring Batch一起使用@Configuration和@EnableScheduling

来自分类Dev

传输编码分块时如何使用HttpsUrlconnection读取响应

来自分类Dev

如何使用PHP从CSV文件读取和删除行?

来自分类Dev

如何使用Spring Batch存储整个读取行?

来自分类Dev

Spring Boot Batch MultiResourceItemReader:如何使用@Value()从jar位置读取文件

来自分类Dev

如何使用Spring Batch通过excel文件读取和解析?

来自分类Dev

如何使用Spring从资源中读取查询?

来自分类Dev

如何使用Spring Batch读取简单的XML列表?

来自分类Dev

Spring-Batch:如何使用StaxEventReader逐节点读取加密的XML文件

来自分类Dev

如何使用Spring Batch解析CSV(包含逗号的值)

来自分类Dev

Spring Batch:不使用jms进行远程分块和分区

来自分类Dev

如何处理大的csv文件或分块读取大的CSV文件

来自分类Dev

传输编码分块时如何使用HttpsUrlconnection读取响应

来自分类Dev

如何使用Spring Batch处理多个CSV格式的文件

来自分类Dev

如何使用Spring Batch无条件写入每个读取行的多个表

来自分类Dev

Spring Batch读取不同的CSV文件和XML输出

来自分类Dev

如何使用spring-batch从文件夹中连续读取文件?

来自分类Dev

如何使用 Pandas 明智地读取 csv 行并转换为数据框列?

来自分类Dev

读取具有 1M 行和 900Mo 大小的 csv 文件时,Spring Batch OutOfMemoryException

Related 相关文章

  1. 1

    如何使用基于Java的配置来配置Spring Batch StepScope?

  2. 2

    如何使用Spring从资源中读取查询?

  3. 3

    如何使用Spring Batch读取简单的XML列表?

  4. 4

    如何使用csvHelper读取csv文件中的第二行

  5. 5

    如何使用Spring Batch查看集群中的所有作业?

  6. 6

    如何使用Spring Integration逐行读取文件

  7. 7

    如何使用Spring Batch解析CSV(包含逗号的值)

  8. 8

    如何使用ThreadPoolTaskScheduler动态调度Spring Batch作业

  9. 9

    如何使用Spring Controller从URL读取文件?

  10. 10

    如何使用批注在Spring Batch中运行多个作业

  11. 11

    如何与Spring Batch一起使用@Configuration和@EnableScheduling

  12. 12

    传输编码分块时如何使用HttpsUrlconnection读取响应

  13. 13

    如何使用PHP从CSV文件读取和删除行?

  14. 14

    如何使用Spring Batch存储整个读取行?

  15. 15

    Spring Boot Batch MultiResourceItemReader:如何使用@Value()从jar位置读取文件

  16. 16

    如何使用Spring Batch通过excel文件读取和解析?

  17. 17

    如何使用Spring从资源中读取查询?

  18. 18

    如何使用Spring Batch读取简单的XML列表?

  19. 19

    Spring-Batch:如何使用StaxEventReader逐节点读取加密的XML文件

  20. 20

    如何使用Spring Batch解析CSV(包含逗号的值)

  21. 21

    Spring Batch:不使用jms进行远程分块和分区

  22. 22

    如何处理大的csv文件或分块读取大的CSV文件

  23. 23

    传输编码分块时如何使用HttpsUrlconnection读取响应

  24. 24

    如何使用Spring Batch处理多个CSV格式的文件

  25. 25

    如何使用Spring Batch无条件写入每个读取行的多个表

  26. 26

    Spring Batch读取不同的CSV文件和XML输出

  27. 27

    如何使用spring-batch从文件夹中连续读取文件?

  28. 28

    如何使用 Pandas 明智地读取 csv 行并转换为数据框列?

  29. 29

    读取具有 1M 行和 900Mo 大小的 csv 文件时,Spring Batch OutOfMemoryException

热门标签

归档