Каждый раз, когда я запускаю свой проект 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
Version: 3.7.0.RELEASE
Build Id: 201506290649
Платформа:
Eclipse Luna SR2 (4.4.2)
java
eclipse
spring-boot
breakpoints
Бруно де Фрейтас Баррос
источник
источник
return !(this instanceof org.springframework.boot.devtools.restart.SilentExitExceptionHandler.SilentExitException);
это должна быть Java, даже если вы разрабатываете на другом языке JVM.Ответы:
К сожалению, это известная проблема с новым
spring-boot-devtools
модулем (см. Https://github.com/spring-projects/spring-boot/issues/3100 ). Мы используем этот трюк, чтобы убить основной поток, чтобы мы могли заменить его перезагружаемой версией. До сих пор я не нашел способа предотвратить срабатывание точки останова отладки.На данный момент вы можете переключить флажок «приостанавливать выполнение при неперехваченных исключениях» в настройках Java -> Отладка, чтобы этого не происходило.
источник
Поскольку 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
.источник
Добавьте свойство в качестве аргумента виртуальной машины в конфигурацию, например:
Таким образом, вам не нужно менять свой код, как в случае использования:
System.setProperty("spring.devtools.restart.enabled", "false");
источник
Мое решение:
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
.Это не решает вашу проблему с точкой останова ...
источник
Попробуйте запустить devtools во время выполнения области:
источник