如何处理 spring-batch writer 中的摘要信息

How to handle summary information in spring-batch writer

我正在使用 Spring Batch,我想知道是否可以在 Spring Batch writer 写入文件后修改文件,或者是否有任何其他解决方案解决我的问题。

目前,我的 Spring 批处理 HeaderCallback 创建的页眉部分也包含摘要标签。

我面临的问题是我前面没有 NumberOfSuccessfulTransactions / NumberOfFailedTransactions 来填充 XML 中的摘要部分。只有在处理完所有块后,我才有这个。

当 spring 批量写入文件时,我无法将摘要部分移动到 FooterCallback 部分,因为该文件根据序列感知的 XSD 进行了验证。序列是 Header , Summary 然后是 Transactions.

创建输出文件需要遵循的 XML 示例如下:

<Doc>
   <Header>
      <Id></Id>
      <CreationDate></CreationDate>
   <Header>
   <Summary>
      <NumberOfSuccessfulTransactions></NumberOfSuccessfulTransactions>
      <NumberOfSuccessfulTransactions></NumberOfFailedTransactions>
   <Summary>
   <Transaction>
      <ErrorCode></ErrorCode>
      <ErrorDescription></ErrorDescription>
   <Transaction>
   <Transaction>
      <ErrorCode></ErrorCode>
      <ErrorDescription></ErrorDescription>
   <Transaction>
   <Transaction>
      <ErrorCode></ErrorCode>
      <ErrorDescription></ErrorDescription>
   <Transaction>
   <Transaction>
      <ErrorCode></ErrorCode>
      <ErrorDescription></ErrorDescription>
   <Transaction>
   <Transaction>
      <ErrorCode></ErrorCode>
      <ErrorDescription></ErrorDescription>
   <Transaction>
<Doc>

您可以为这些字段编写一个虚拟值,然后在步骤完成后替换这些值(例如在步骤侦听器中)。

另一种选择是编写一个单独的文件,仅包含 <Summary> 之后的内容,然后在后续步骤中构建最终文件。

跟踪步骤执行上下文中的所有错误并仅在最后写入文件(在步骤侦听器中或在将有关失败的数据从步骤上下文提升到作业上下文之后的后续步骤中)如果您没有太多错误,则可以使用。