首页 > 解决方案 > Java EE jsr352中的Spring批处理CompositeWriter等价物

问题描述

我想了解在 Java EE 7 jsr 352 批处理中实现 Spring 批处理 CompositeWriter 的可能性。

JSL 不允许我在一个步骤中包含多个 ItemWriters。我的方法是在单个 ItemWriter 中引入委托模式来执行多个 sql 语句,就像 spring 批处理 CompositeWriter 一样。请参阅下面的示例代码。

<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd" version="1.0">
    <step id="step1">
        <chunk item-count="1000">
            <reader ref="JdbcCursorItemReader"/>
            <writer ref="myCompositeItemWriter"/>
        </chunk>    
    </step>
</job>


Pseudo code for myCompositeItemWriter:

MyCompositeItemWriter implements ItemWriter {
     List<ItemWriter> delegates;

     public void open() {
      //initialize delegates here
     }

     public void write(List<Object> chunkedItems) {
        for (ItemWriter myWriter: delegates) {
             myWriter.write(chunkedItems);
          }
       }

}

标签: javaspring-batchjava-ee-7jsr352

解决方案


JSR-352 规范,“8.2.1.3 Writer”部分:

A chunk type step must have one and only one item writer.

规范中没有任何内容涉及作曲作家。因此,您需要创建一个自定义复合编写器,如您所描述的那样实现委托模式,并将其用作您的步骤中的项目编写器。显然,如果您使用 Spring Batch 作为您的 JSR-352 实现,您将免费获得此功能。


推荐阅读