Точка останова при throw new SilentExitException () в Eclipse + Spring Boot

Каждый раз, когда я запускаю свой проект Spring Boot в режиме отладки в Eclipse IDE (Spring Tool Suite), поток останавливается на строке throw new SilentExitException(); даже без точки останова.

Есть ли какое-то решение, чтобы избежать такого поведения?

org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread() (line 53):

public static void exitCurrentThread() {
    throw new SilentExitException();
}

Это начинает происходить после обновления до 1.3.0 Milestones.

Spring Tool Suite

Version: 3.7.0.RELEASE
Build Id: 201506290649

Платформа:

Eclipse Luna SR2 (4.4.2)

person Bruno De Freitas Barros    schedule 24.09.2015    source источник
comment
Для пользователей IntelliJ, попавших сюда: Добавьте условие в точку останова в Run | Просмотреть точки останова ... | Любые исключения: return !(this instanceof org.springframework.boot.devtools.restart.SilentExitExceptionHandler.SilentExitException); Это должна быть Java, даже если вы разрабатываете на другом языке JVM.   -  person Marco Eckstein    schedule 03.05.2019


Ответы (6)


К сожалению, это известная проблема с новым модулем spring-boot-devtools (см. https://github.com/spring-projects/spring-boot/issues/3100). Мы используем этот трюк, чтобы убить основной поток, чтобы мы могли заменить его перезагружаемой версией. Пока я не нашел способа предотвратить срабатывание точки останова отладки.

На данный момент вы можете переключить флажок «приостанавливать выполнение при неперехваченных исключениях» в настройках Java -> Отладка, чтобы этого не происходило.

person Phil Webb    schedule 25.09.2015
comment
К сожалению, эта проблема все еще существует. - person Stefan Falk; 04.03.2017
comment
Эта проблема все еще существует. - person nabster; 02.11.2019
comment
все еще присутствует: p - person Sachin Sharma; 03.03.2020
comment
Эта проблема все еще существует. с использованием Eclipse версии: 2019-06 (4.12.0) и spring -boot 2.0.6. Окно- ›Настройки -.› Java - ›Debig -› не отмечен Приостановить выполнение при неперехваченных исключениях - person src3369; 02.06.2020
comment
Все еще присутствует в Eclipse версии 2020-03 (4.15.0) и spring -boot 2.3.1 - person HDJEMAI; 14.06.2020
comment
Все еще присутствует в весенней загрузке 2.4.0 и версии eclipse: 2020-06 (4.16.0) - person Shramik; 11.12.2020
comment
Ну вы знаете, все еще присутствует - person MBach; 10.05.2021

Добавьте свойство в качестве аргумента виртуальной машины:

-Dspring.devtools.restart.enabled=false

введите описание изображения здесь

Таким образом, вам не нужно менять свой код, как в случае использования:

System.setProperty("spring.devtools.restart.enabled", "false");
person xbranko    schedule 25.11.2019
comment
Из других вариантов я использовал это. Большое спасибо за то, что сделали мой день! - person sivakadi; 17.03.2020

Поскольку Eclipse в режиме отладки уже допускает ограниченное горячее исправление, я считаю, что перезагрузчик в большинстве случаев является контрпродуктивным, поэтому я решил отключить его следующим образом:

System.setProperty("spring.devtools.restart.enabled", "false");

Ссылка: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart-disable

Поскольку это исключение генерируется перезагрузчиком, это также решает эту проблему. Обратите внимание, что вам придется использовать метод System.setProperty вместо того, чтобы устанавливать его в application.properties.

person RichN    schedule 28.03.2018

Мое решение:

public static void main(String[] args) {
    try {
        SpringApplication.run(App.class, args);
    } catch (Throwable e) {
        if(e.getClass().getName().contains("SilentExitException")) {
            LOGGER.debug("Spring is restarting the main thread - See spring-boot-devtools");
        } else {
            LOGGER.error("Application crashed!", e);
        }
    }
}

Не имеет значения, что мы игнорируем SilentExitException, потому что инструменты разработчика просто перезапускают экземпляр с SilentExitException, что не очень тихо. Этот блок попытки заставит его замолчать ...

Мне пришлось использовать сопоставление текста в классе, поскольку SilentExitException является частным в SilentExitExceptionHandler.

Это не решает вашу проблему с точкой останова ...

person Dan Thomas    schedule 03.02.2020

Попробуйте запустить devtools во время выполнения области:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>
person ra1729    schedule 14.12.2018

У меня была такая же проблема при запуске проекта весенней загрузки. Я нашел блок TRY CATCH, используемый в методе Main.

Удалите блок try catch, запустите код. эта ошибка больше не повторится. как показано ниже:

public static void main (String [] args) {

    SpringApplication.run(TrewAuthApplication.class, args);

}
person Hameed Riswan    schedule 18.02.2021