обработчик исключений приложения весенней загрузки, у которого нет контроллера

Приложение My Spring для загрузки - это отдельное приложение, у которого нет контроллера. Я вызываю сервисный уровень из основного метода приложения весенней загрузки.

Я попытался использовать аннотации @ExceptionHandler @ControllerAdvice в своем классе, как показано ниже. но управление никогда не попадает в метод My Exception Handler

package com.test.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

    @ControllerAdvice
    public class MyExceptionHandler {
    
        @ExceptionHandler(NullPointerException.class)
        public void handleNullpointerExcetion() {
            System.out.println("Handling Null pointer exception");
        }
    }

Пробовал также с именем пакета, которое мне нужно сканировать в @ControllerAdvice, но он не работает

@ControllerAdvice("com.test.utility")
    public class MyExceptionHandler {
    
        @ExceptionHandler(NullPointerException.class)
        public void handleNullpointerExcetion() {
            System.out.println("Handling Null pointer exception");
        }
    }

Не можем ли мы обрабатывать исключение в централизованном месте, если у меня нет класса контроллера, который мы аннотируем с помощью @RestContoller или @Controller


person andrew    schedule 31.03.2021    source источник
comment
Совет по контроллеру - использовать с контроллерами и RestControllers.   -  person Simon Martinelli    schedule 31.03.2021
comment
Отвечает ли это на ваш вопрос? Есть ли способ использовать @ControllerAdvice в @Service   -  person Simon Martinelli    schedule 31.03.2021
comment
хорошо ... поэтому мы не можем использовать централизованную обработку исключений с @ controllerAdvice и @ ExceptionHandler для приложений, у которых нет класса API / контроллера. @Simon Martinelli   -  person andrew    schedule 31.03.2021
comment
Вы должны использовать Аспект, как в связанном вопросе   -  person Simon Martinelli    schedule 31.03.2021
comment
Также прочтите baeldung.com/spring-aop   -  person Simon Martinelli    schedule 31.03.2021


Ответы (1)


Я так не думаю.

ControllerAdvice используется только тогда, когда контроллер вернет исключение. Это уровень, который существует после того, как ваша конечная точка в контроллере вернется, но до фактического возврата ответа, для вставки и глобальной обработки исключения и предназначен для того, чтобы быть глобальным только для контроллеров. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html

поскольку у вас нет контроллера, я полагаю, что ControllerAdvice вам здесь не поможет.

Если вам нужен централизованный механизм обработки ошибок, вам придется реализовать что-то похожее на совет контроллера для своей функции Main, на которую вы можете иметь унифицированные ответы на обработку исключений.

person Hesham Amer    schedule 31.03.2021
comment
хорошо .. поэтому мы не можем использовать централизованную обработку исключений с @ controllerAdvice и @ ExceptionHandler для приложений, у которых нет открытого API / класса контроллера @Hesham Amer - person andrew; 31.03.2021
comment
Вокруг основного метода? Он не будет вызываться, когда вы запустите его как исполняемый файл JAR. - person Simon Martinelli; 31.03.2021
comment
@Simon, я думал, что выполнение JAR - это выполнение функции Main. Я имел в виду что-то вроде этого static void main(String[] args){ try { //Main code here } catch ( all your exceptions and handling ) { } } Разве это не будет выполняться как JAR? - person Hesham Amer; 06.04.2021
comment
Проблема в том, что ваше приложение может быть многопоточным, и тогда перехват не будет выполняться. Вы должны создать аспект для своих классов обслуживания - person Simon Martinelli; 06.04.2021
comment
Я не уверен в этой части многопоточности либо @Simon, я ничего не слышал из исходного вопроса о многопоточности. На мой взгляд, если там не происходит необработанных потоков, все исключения будут перехвачены. Я прочитал кое-что об аннотации Aspect, и кажется, что это также может быть очень хорошей идеей. Спасибо, что обратили на это внимание. Ссылка для справки: docs.spring.io/spring-framework/docs/4.3.15.RELEASE/ - person Hesham Amer; 06.04.2021