2016-08-25 1 views
0

У меня есть следующие ItemReader:Как поймать элемент ItemStreamExpatchException после ошибки @Retryable maxAttempts?

import org.springframework.batch.item.ExecutionContext; 
import org.springframework.batch.item.ItemStreamException; 
import org.springframework.batch.item.file.FlatFileItemReader; 
import org.springframework.batch.item.file.LineMapper; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.core.io.FileSystemResource; 
import org.springframework.retry.annotation.Retryable; 
import org.springframework.stereotype.Service; 

@Service 
public class MyReader extends FlatFileItemReader<Holding> { 

    @Autowired 
    public MyReader(LineMapper<Holding> lineMapper, File loadFile) { 
     setResource(new FileSystemResource(loadFile)); 
     final int NUMBER_OF_HEADER_LINES = 1; 
     setLinesToSkip(NUMBER_OF_HEADER_LINES); 
     setLineMapper(lineMapper); 
    } 

    @Override 
    @Retryable(value=ItemStreamException.class, maxAttempts=5, [email protected](delay=1800000)) 
    public void open(ExecutionContext executionContext) throws ItemStreamException { 
       super.open(executionContext); 
    } 
} 

После 5-й попытки, ItemStreamException отбрасывается, если loadFile не существует. Как я могу поймать это исключение?

Я хочу обработать это исключение, отправив электронное письмо администратору. Я пробовал окружение jobLauncher.run(job, jobParameters); с предложением try catch, но он не работает.

ответ

1

Настройте повторный перехватчик в качестве компонента и укажите его в свойстве interceptor; есть RetryInterceptorBuilder, чтобы помочь собрать сборку.

Вы можете добавить регенератора в перехватчик, который вызывается после того, как повторные попытки исчерпаны.

0

Вы можете применять классы исключаемого исключения для вашего читателя, поэтому Spring Batch не подведет работу.

Для отправки сообщения электронной почты в случае неудачи я предлагаю вам использовать Job Listener вместо try/catch.

Nghia