public class TaskletConfiguration {
...
@Bean { ...
public Step step() {
return steps.get("step"/span>)
.tasklet(tasklet)
.exceptionHandler(logExceptionHandler()) //用于將例外記錄到特定通道的處理程式。
.build()。
}
@Bean
public Job job() {
return jobs.get("job"/span>)
.start(step())
.build()。
}
}
public class ExampleTasklet implements Tasklet, StepExecutionListener{
...
@Override
public RepeatStatus execute(...) throws Exception {
//do my tasklet
///如果失敗則拋出,并由logExceptionHandler()處理。
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
//想要拋出,以便logExceptionHandler()可以將其作為execute()中的拋出處理。
throwable_function()。
}
}
這是我在spring boot中使用tasklet的示例代碼。
我的問題是:我想從 盡管有這樣的限制,我為什么對 有什么想法可以在每個 uj5u.com熱心網友回復: 此外,即使你在 我認為在
標籤:afterstep()/code>中拋出例外,但介面不允許。
afterstep()念念不忘,因為我想用抽象類來制作Tasklet模板,它可以驗證afterstep()中的每個執行。我想在所有的execute()完成后運行驗證,這將被子類所重寫。所以我沒有選擇,只能使用afterstep()。
execute()之后運行驗證方法,并使用可拋物或者afterstep()可以將例外傳遞給logExceptionHandler()?我希望能在TaskletConfiguration類中定義logExceptionHandler()。如果它被定義在Tasklet類中,那將會很累,因為我將創建抽象類,它將被許多子類所繼承。
StepExecutionListener#afterStep被設計成不拋出檢查的例外。下面是它的Javadoc中的一段摘錄:在步驟的處理邏輯(包括成功或失敗)執行后呼叫。
在此方法中拋出例外沒有任何影響,它只會被記錄下來。
afterStep中拋出一個(運行時)例外,這個例外也不會被傳遞給例外處理程式,它只會被記錄下來,正如Javadoc中提到的那樣。
StepExecutionListener#afterStep中拋出例外為時已晚,該方法可用于檢查步驟的執行狀態,并在需要時修改ExitStatus以驅動其余的作業執行流程。
