public class TaskletConfiguration {
...
@Bean
public Step step() {
return steps.get("step")
.tasklet(tasklet)
.exceptionHandler(logExceptionHandler()) // Handler for logging exception to specific channel
.build();
}
@Bean
public Job job() {
return jobs.get("job")
.start(step())
.build();
}
}
public class ExampleTasklet implements Tasklet, StepExecutionListener {
...
@Override
public RepeatStatus execute(...) throws Exception {
// Do my tasklet
// Throw if it fails, and be handled by logExceptionHandler()
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
// Want to throw so that logExceptionHandler() can handle it as throwing in execute().
throwable_function();
}
}
这是我在 Spring Boot 中使用 tasklet 的示例代码。我的问题是:我想从 中抛出异常afterstep()
,但接口不允许。
尽管有这个限制,但我痴迷的原因afterstep()
是我想制作抽象类来制作 Tasklet 模板,它可以验证afterstep()
. 我希望在execute()
完成后运行验证,这将被子类覆盖。所以我别无选择,只能使用afterstep()
.
任何想法在每次execute()
使用可抛出或afterstep()
可以将异常传递给之后运行验证方法logExceptionHandler()
?我希望logExceptionHandler()
在TaskletConfiguration
课堂上定义。如果在Tasklet类中定义会很胖,因为我会做抽象类,它会被很多子类继承。