web-dev-qa-db-ja.com

アイテムライターなしでSpring Batch Stepを書く方法

以下の構成を使用して、アイテムライターなしで春のバッチステップを構成しようとしています。ただし、ライター要素に「ライター」属性も要素もないというエラーが表示されます。

私はリンクを通過しました 春のバッチ:ItemWriterのないタスクレット 。しかし、問題を解決できませんでした。私が言及したコードスニペットで行われる特定の変更を誰かに教えてもらえますか?

<batch:job id="helloWorldJob">
        <batch:step id="step1">
            <batch:tasklet>
                <batch:chunk reader="cvsFileItemReader"
                    commit-interval="10">
                </batch:chunk>
            </batch:tasklet>
        </batch:step>
    </batch:job>

    <bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

        <property name="resource" value="classpath:cvs/input/report.csv" />

        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="names" value="id,sales,qty,staffName,date" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean class="com.mkyong.ReportFieldSetMapper" />

                    <!-- if no data type conversion, use BeanWrapperFieldSetMapper to map by name
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="prototypeBeanName" value="report" />
                    </bean>
                     -->
                </property>
            </bean>
        </property>

    </bean>
11
user3247376

チャンクベースのステップリーダーとライターは必須です。
ライターが不要な場合は、何もしないNo-operation ItemWriterを使用します。

編集:
何もしない実装は、何もしないインターフェースの空の実装です...何もありません!
クラスに空のメソッドで望ましいインターフェースを実装させるだけです。

何もしないItemWriter:

public class NoOpItemWriter implements ItemWriter {
  void write(Java.util.List<? extends T> items) throws Java.lang.Exception {
    // no-op
  }
}
13

私はあなたが答えを得たことを願っていますが、私は他の読者のためにそれを説明したいと思います。チャンクでは、リーダーとライターは必須であり、プロセッサーはオプションです。あなたの場合、ライターが必要ない場合は、ItemWriterを実装するクラスを作成する必要があります。書き込みメソッドをオーバーライドし、空白のままにします。次に、ライタークラスのBeanを作成し、ライターの参照として渡します。

<batch:step id="recordProcessingStep" >
        <batch:tasklet>
            <batch:chunk reader="fileReader" processor="recordProcessor"
                writer="rocordWriter" commit-interval="1" />
        </batch:tasklet>
    </batch:step>

ライタークラスは次のようになります。

public class RecordWriter<T> implements ItemWriter<T> {
@Override
public void write(List<? extends T> items) throws Exception {
    // TODO Auto-generated method stub

}

}

2
Ashok Singh

maven repo には、「spring-batch-samples」というフレームワークがあります。
このフレームワークには、このライターがあります:

org.springframework.batch.sample.support.DummyItemWriter
1
user2065095

Java 8以上の場合、読みやすくするためにこの方法を使用できます。空のクラスは必要ありません。

public Step requeryFpxStep(){
        return stepBuilderFactory.get("MyJobName")
                .<Foo, Foo>chunk(2)
                .reader(myReader())
                .processor(myProcessor())
                .writer(items -> {
                    // do nothing
                })
                .build();
}
0
Kar Fung