Глобальный обработчик исключений в контексте верблюда - охватывает все маршруты - PullRequest
0 голосов
/ 20 января 2019

У меня есть 10 верблюжьих маршрутов, что-то вроде ниже

@AllArgsConstructor
public class MyCamelRoute extends RouteBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {
}

}  

Выше MyCamelRoute создается с использованием приведенного ниже кода, который загружает верблюжий маршрут в пружинный контейнер

 @Bean("myCamelRoute")
 public RouteBuilder createMyCamelRoute () {
        return new MyCamelRoute();
 }

Теперь мне нужно иметь глобальный обработчик исключений в контексте верблюда, охватывающий все маршруты.

1 Ответ

0 голосов
/ 20 января 2019

Вы можете определить глобальное исключение для всех маршрутов, определенных внутри Routebuilder, из документации верблюда

Глобальная область действия для Java DSL для каждого экземпляра RouteBuilder, поэтому, если вы хотите совместно использовать несколько классов RouteBuilder, создайте базовый абстрактный класс RouteBuilder и поместите логику обработки ошибок в его метод configure. А затем расширьте этот класс и убедитесь, что класс super.configure (). Мы просто используем технику наследования Java.

Другими словами, класс BaseRouteBuilder будет:

public abstract BaseRouteBuilder extends RouteBuilder {

@Override
public void configure() {
   onException(Throwable.class).log("Excpetion caught");
}

А потом ваши маршруты:

@AllArgsConstructor
public class MyCamelRoute extends BaseRouteBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {
        super.configure();
        // Route Configuration here
    }

}

Как указывалось, важно вызывать super.configure() из дочернего класса, в противном случае предложение исключения не будет выполнено.

...