4

STS 2.81 に含まれている Spring Batch テンプレートを使用し、Manning による Spring Batch in Action の例を使用して、Spring Batch ジョブを作成しています。問題なくチャンク リーダーとライターを実行できますが、コードがプロセッサをスキップしています。私はすべてのオブジェクトを無効にしようと試みましたが、オブジェクトはプロセッサに入っても何もありません。オブジェクトは、プロセッサが無視されているかのように書き込まれます。プロセッサ内で System.out.println を呼び出してみましたが、端末に何も出力されません。最終的に、XML Bean を使用する構成からアノテーションを介してコンポーネントに構成を変更しましたが、どちらも機能しませんでした。見逃している設定があるかどうかはわかりません...Spring Batch in ActionとSpringSource Webサイトの両方の例に従いましたが、すべて問題ないようです...助けてください!

コードは次のとおりです。

<batch:job id="job1">
    <batch:step id="step1"  >           
        <batch:tasklet transaction-manager="transactionManager" start-limit="100" >
            <batch:chunk reader="productFlatFileReader"
                         processor="productProcessor"
                         writer="productFlatFileWriter"
                         commit-interval="10" />
        </batch:tasklet>
    </batch:step>
</batch:job>

プロセッサ Bean は次のとおりです。

<bean id="productProcessor" class="com.test.training.processors.ProductProcessor" />

これは、無駄に実行しようとしている Processor クラスです。

package com.test.training.processors;

import org.springframework.batch.item.ItemProcessor;
import org.springframework.stereotype.Component;
import com.test.training.entities.Product;

public class ProductProcessor implements ItemProcessor<Product, Product> {

@Override
public Product process(Product product) throws Exception {
    product.setDescription("Processor is WORKING!");
    return product;
    //return this.validateProductByProductIdentifier(product) ? null : product;
}

private boolean validateProductByProductIdentifier(Product product) {
    return product.getProduct_identifier() == 5 ? true : false;
}
}
4

1 に答える 1