弹出批处理作业中的自定义异常跳过无法正常工作

时间:2016-03-14 18:22:36

标签: spring spring-batch

对于我的Spring批处理作业业务逻辑,如果是ArrayIndexOutOfBoundsException,我必须从读者FlatFileItemReader的自定义映射器FieldSetMapper中跳过自定义异常(CSVFieldMappingException)。为此我添加了作业步骤的配置,如下所示。

public class ViewController: UIViewController {
    var count = 0

    // Connect these up on your storyboard
    @IBOutlet var button: UIButton!
    @IBOutlet var label: UILabel!


    @IBAction func pressButton(sender: AnyObject) {
        if ( count % 2 ) == 0 {
            label.text = "text 1"
        }
        else {
            label.text = "text 2"
        }
        ++count
    }
}

但是这不能用作另一个运行时异常,每当我抛出自定义RunTimeException时都会引发FlatFileParseException。为了解决这个问题,我必须在跳过上面的conf中添加FlatFileParseException。但是,当引发任何其他异常时,这将破坏我的其他场景。 我怎么解决这个问题?我不能使我的CustomException Callable而不是运行时异常,因为FieldSetMapper接口没有这样的实现。

上述情况下的堆栈跟踪如下。我可以看到我的CustomException被更改为链中的一些其他异常。

@Bean
public Step step1(StepBuilderFactory stepBuilderFactory,
                  ItemReader reader, ItemWriter writer,
                  ItemProcessor processor, @Value("${reader.chunkSize}")
                  int chunkSize) {
    LOGGER.info("Step configuration loaded with chunk size {}", chunkSize);
    return stepBuilderFactory.get("step1")
            .chunk(chunkSize).reader(reader)
            .processor(processor).writer(writer)
            .faultTolerant()
            .skip(CSVFieldMappingException.class)
            .skipLimit(1000)
            .build();

1 个答案:

答案 0 :(得分:0)

进一步查看从FlatFileItemReader抛出的FlatFileItemReader.lineMapper异常后,将{@ 1}}包装为。{ 您可以编写自己的FlatFileParseException,将ItemReader委托给真正的读者并抓住open():如果FlatFileParseException错误cause将其丢回或重新抛出原始异常