对于我的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();
答案 0 :(得分:0)
进一步查看从FlatFileItemReader
抛出的FlatFileItemReader.lineMapper
异常后,将{@ 1}}包装为。{
您可以编写自己的FlatFileParseException
,将ItemReader
委托给真正的读者并抓住open()
:如果FlatFileParseException
错误cause
将其丢回或重新抛出原始异常