提高春季批处理作业的性能

时间:2021-03-01 14:09:53

标签: spring-boot performance spring-batch

我正在为我们的文件上传过程实现一个 spring 批处理作业。我的要求是读取一个平面文件,应用业务逻辑,然后将其存储在数据库中,然后发布一条 Kafka 消息。

我有一个基于块的步骤,它使用自定义读取器、处理器、写入器。该过程运行良好,但需要大量时间来处理大文件。

处理一个有 60K 条记录的文件需要 15 分钟。我需要将它减少到 5 分钟以内,因为我们将消耗比这更大的文件。

根据 https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html,我理解使其成为多线程会以重启能力为代价提高性能。但是,我使用的是 FlatFileItemReader、ItemProcessor、ItemWriter,但它们都不是线程安全的。

关于如何提高性能的任何建议?

这是编写器代码:-

 public void write(List<? extends Message> items) {
        items.forEach(this::process);
    }
    
  private void process(Message message) {
        if (message == null)
            return;
        try {
           //message is a DTO that have info about success or failure.
            if (success) {
                //post kafka message using spring cloud stream
                //insert record in DB using spring jpaRepository
            } else {
                 //insert record in DB using spring jpaRepository
            }
        } catch (Exception e) {
           //throw exception
        }
    }

最好的问候, 普雷蒂

1 个答案:

答案 0 :(得分:0)

相关问题