问题标签 [itemwriter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
524 浏览

java - JdbcBatchItemWriter 如何决定批量大小?

我正在浏览JdbcBatchItemWriter的文档,但注意到无法指定此类使用的批处理大小。jdbcTemplate我认为一个有名字的类Batch会有一些机制来指定批量大小,但看起来情况并非如此。我现在有以下关于确定批量大小的问题:

  1. 批量大小是否等于提交间隔?
  2. 如果不是,批量大小是否由框架自动计算?

最后但并非最不重要的一点是,有没有办法在 为类定义 bean 时显式指定要使用的批处理大小jdbcTemplateJdbcBatchItemWriterJdbcBatchItemWriter

0 投票
3 回答
2111 浏览

java - Spring Batch:使用自定义批量大小将列表写入数据库表

背景

我有一个 Spring Batch工作,其中:

  1. FlatFileItemReader- 从文件中一次读取一行
  2. ItemProcesor- 将文件中的行转换为 aList<MyObject>并返回List. 也就是说,文件中的每一行都被分解为一个List<MyObject>(文件中的 1 行转换为许多输出行)。
  3. ItemWriter- 将 写入List<MyObject>数据库表。(我使用这个 实现来解压从处理器和委托接收到的列表到 a JdbcBatchItemWriter

问题

  • 在第 2 点)处理器可以返回List100000 个MyObject实例。
  • 在第 3 点),委托JdbcBatchItemWriter最终会将List包含 100000 个对象的整个数据写入数据库。

我的问题是:JdbcBatchItemWriter不允许自定义批量大小。出于所有实际目的,该步骤的批大小 = 提交间隔。考虑到这一点,Spring Batch中是否有另一种ItemWriter可用的实现,它允许写入数据库并允许可配置的批量大小?如果没有,如何自己编写自定义作家来实现这一目标?

0 投票
1 回答
280 浏览

java - 如何在 Spring Batch ItemWriter 中为子 bean 编写多个 XML 文件?

我有一个批处理作业,它从数据库中检索记录,处理它们,并将结果传递给编写器。传递给 writer 的 bean 有四个字段需要写入单独的 xml 文件。其中一个字段是代表原始记录的 bean,其他三个字段是与记录关联的子元素的集合。

我最初尝试使用 jackson 来解析 bean 并生成文件,但我发现这种方法在应用于批处理模型时会出现问题。

接下来,我已经转向StaxEventItemWriter对每个子字段使用 s,这看起来非常合适,但是我在实现一个可以处理所有各种子类型的编写器时遇到了麻烦。我研究了CompositeItemWriterand ClassifierCompositeItemWriter,但它们似乎更适合为同一类型的 bean 设置多个编写器,而我需要多个适合不同类型的编写器。任何建议将不胜感激!

域示例:

对于传递给编写器的每个容器 bean,我需要为每个RecordBean例如 record_1.xml 创建一个唯一的 XML 文件,并且我需要将每个集合写入一个聚合文件,该文件将用作该子类型的所有子库,跨越所有的记录。

输出示例:record_1.xml

记录_2.xml

a_children.xml

b_children.xml & c_children.xml 与 a_children.xml 相同。

0 投票
0 回答
156 浏览

spring - 使用 StaxEventItemWriter 时无法创建动态文件名

我正在扩展 StaxEventItemWriter 以编写自定义 ItemWriter 以便我可以在运行时动态创建文件名。文件名创建得很好但是我在尝试写入数据时遇到了问题。

添加了下面的代码,但它不起作用。

0 投票
0 回答
355 浏览

java - Spring Batch:ClassifierCompositeItemWriter 如何决定是创建一个新的编写器还是使用现有的编写器?

给定一个 使用面向块的处理的Spring Batch作业,我需要根据属性的值将相同的数据写入不同的文件。换句话说,我需要在运行时根据属性的值来确定输出文件名。

我在SO上找到了这个答案,看起来我可以使用 a 在运行时动态创建编写器。ClassifierCompositeItemWriter

我想了解的是,是否会为每次写入ClassifierCompositeItemWriter创建一个新实例?ItemWriter如果不是,如何ClassifierCompositeItemWriter知道域对象中的哪个属性值用于缓存ItemWriter实例以便可以重用它们?(而不是为每个对象创建一个新ItemWriter的..)

我需要自己实现 wrtiers 的缓存还是由ClassfierCompositeItemWriter自动处理?

假设 writer 的 cahcing 需要手动实现,我想出了以下实现。但是,我会假设这是ClassfierCompositeItemWriter自己会做的事情?

0 投票
1 回答
396 浏览

java - FlatFileItemWriter 在每个 JobExecution 上写入一个新的(不存在的)文件

我目前正在处理 Spring Batch CSV Export。使用基于块的读取器、写入器、处理器。读取和处理工作完美无缺,但 FlatFileItemWriter 总是覆盖输出 CSV 文件。我希望作业检查文件是否存在(如果存在)增加文件名并写入新文件。

这是我当前的代码:我的 Helper 类,它检查 File 是否存在并返回新的 String 供 Writer 使用。

我的 ItemWriter :

每次执行 Job 时,FileWriter 都会写入相同的输出文件。OrderFileManager 在 Job 中自动装配。并且作者收到 OrderFileManager。getEmptyOrderNameString() 作为参数。

0 投票
1 回答
571 浏览

java - Spring批处理GZIP ItemWriter/ItemReader

我有一个 Spring Boot 应用程序,我写了一些 ItemWriter 和 ItemReaders,例如 JSON 文件和 CSV 文件。

我想添加一个压缩到 GZIP 并从 GZIP 解压缩的步骤。

我想知道是否可以像往常一样使用 JavaStreams -

如果我有一些 InputStream 或 OutputStream,我可以用另一个流来装饰它(即,另一个流可以在它的构造函数中获取它并使用它),这样就可以轻松地获得所有流的功能。

可以用 Spring ItemWriter 和 ItemReader 完成吗?

否则,为现有的作者和读者添加压缩和解压缩的最佳方法是什么?

0 投票
1 回答
71 浏览

spring-boot - 发送html电子邮件的问题

我创建了一个小型 spring 批处理应用程序,它将从文件中读取数据并发送 html 电子邮件。StudentProcessor 创建 MImeMessage 和 ItemWriter 发送电子邮件 该文件包含 Student Id 和 Student Name, Home city, Visiting city StudentDetails POJO:

我的 job.xml 是

我常见的 content.xml 文件是:

学生处理器:

我在 MimeMessagePreparator 准备函数中放置了一个调试器,但代码没有到达调试器。它只是跳过并转到“return msg”行;由于没有生成味精。ItemWriter 失败。我不确定这里有什么问题。有人可以建议吗?

0 投票
2 回答
296 浏览

spring - 在春季批处理中分离步骤类

我试图找到解决方案,但我不能...... ㅠㅠ

我想在下面的工作中分离步骤。

我之所以如此分裂,是因为我必须在每一步都使用查询。

我的目的是我必须使用step1,step2中的返回数据。但是 jpaItemReader 就像 async ...所以它不会像上面的顺序那样处理。
像这样的调试流程。

这对我来说是个大问题......我
如何才能等待工作中的每一步?包括查询。

0 投票
1 回答
735 浏览

spring-batch - Spring-Batch:父子关系的项目编写器

我编写了一个返回对象列表的项目处理器。该对象需要拆分为 2 个数据库表(一个父和一个子)。一个标题行,对于这个对应的标题 ID,我们在子表中关联了子行。我使用 ListUnpackingItemWriter 示例来解决列表问题。我使用 CompositeItemWriter 将结果拆分为 2 个写入器,现在我需要将每个写入器拆分为标题和子表。现在每个作家都有相同的行数。有更好的方法吗?解决两个表主键问题。我需要示例编写自定义项目编写器,该编写器在插入之前进行验证。提前谢谢你。

下面是代码