Spring批处理项处理程序未执行

brvekthn  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(176)

我正在使用STS2.81附带的SpringBatch模板和来自SpringBatch in Action的示例创建一个SpringBatch作业。我能够毫无问题地执行块读取器和写入器,但是我的代码跳过了处理器。我甚至尝试过在处理器中清空所有对象,但一无所获。对象仍然设法被写入,就好像处理器被忽略了一样。我试着在处理器中调用System.out.println,但是在终端中没有打印出任何东西。我最终通过注解将配置从使用XML bean更改为使用组件,它也不起作用。我不确定是否有一些设置我遗漏了...我遵循了Spring Batch in Action和SpringSource网站中的示例,一切看起来都很好...帮助!
代码如下:

<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;
}
}
n53p2ov0

n53p2ov01#

Bean配置需要具有scope=“step”,以便Spring Batch将Bean识别为批处理Bean。
比如:

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

相关问题