当前位置: 首页 > 知识库问答 >
问题:

提高简单Spring批处理作业性能的提示

程谦
2023-03-14

我第一次使用spring batch应用程序,由于框架太灵活了,我有几个关于性能和实现作业的最佳实践的问题,在spring文档中找不到明确的答案。

>

  • 读取由第三方以先前指定的布局发送的具有固定列长值的ASCII文件(第1步读取器)

    在oracle数据库上写入有效行(第1步写入器)

    执行前一步后,使用第1步的finish时间戳更新数据库中的表(第2步tasklet)

    当作业停止时,发送一封电子邮件,汇总已处理的数量、错误和写入的行数、开始时间和完成时间(这些信息是否在JobRepository元数据中?)

      null

    处理器bean应该用原始对象、解析值(即日期和长度)、解析引发的第一个最终异常和指示验证是否成功的布尔值来转换对象读取并返回包装器。在解析之后,另一个CustomProcessor通过查询已经插入的相似或相同的寄存器来检查是否应该在数据库中插入寄存器。在最坏的情况下,该业务规则可能意味着对数据库中的每一个有效行进行查询。

    jdbcitemwriter丢弃处理器返回的空值,并将有效的寄存器写入数据库。

    我可以使用哪些性能技巧来提高批处理性能?在初步尝试中,将一个完美有效的模拟输入文件加载到数据库中导致15个小时的处理,而无需查询数据库以验证是否应该插入已处理的寄存器。本地处理最简单的解决方案是什么?

  • 共有1个答案

    魏鸿禧
    2023-03-14

    你见过分区吗?http://docs.spring.io/spring-batch/reference/html/scalability.html,这也可能有助于在spring batch中使用reader控件进行远程分块

     类似资料:
    • 问题内容: 我有一个数据模型,该数据模型在一个实体和其他11个实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题是与这些关系的“许多”方面发生的插入次数有关。其中一些可以具有多达100个单独的值,因此要将一个完整的数据包保存在数据库中,最多需要500次插入。 我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行

    • 我正在为我们的文件上传过程执行一个spring批处理工作。我的要求是读取平面文件,应用业务逻辑,然后将其存储在DB中,然后发布一个Kafka消息。 我有一个基于块的步骤,它使用自定义的读取器、处理器和写入器。这个过程工作得很好,但是处理一个大文件需要很多时间。 处理一个有60k条记录的文件需要15分钟。我需要减少到5分钟以下,因为我们将消耗比这更大的文件。 根据https://docs.sprin

    • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

    • 我从http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm Java EE为servlet和过滤器提供异步处理支持。如果servlet或过滤器在处理请求时达到潜在的阻塞操作,它可以将该操作分配给异步执行上下文,并将与请求相关联的线程立即返回到容器,而不生成响应。阻塞操作在不同线程的异步执行上下文中完成,该线程可以生成响应或将请求分派

    • 我有一个数据模型,在一个实体和11个其他实体之间有一对多的关系。这12个实体一起代表一个数据包。我遇到的问题是,在这些关系的“多”端发生的插入数量。其中一些可以有多达100个单独的值,因此要在数据库中保存一个完整的数据包,最多需要500次插入。 我在InnoDB表中使用MySQL 5.5。现在,通过对数据库的测试,我发现在处理批插入时,它可以轻松地每秒执行15000次插入(对于加载数据,插入次数甚