Punto de interrupción en "lanzar nueva SilentSalirException ()" en Eclipse + Spring Boot

83

Cada vez que ejecuto mi proyecto Spring Boot en modo de depuración en Eclipse IDE (Spring Tool Suite), el hilo se detiene en la throw new SilentExitException();línea incluso sin un punto de interrupción.

¿Existe alguna solución para evitar este comportamiento?

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

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

Esto comienza a suceder después de la actualización a 1.3.0 Milestones.

Conjunto de herramientas Spring

Version: 3.7.0.RELEASE
Build Id: 201506290649

Plataforma:

Eclipse Luna SR2 (4.4.2)
Bruno De Freitas Barros
fuente
2
Para los usuarios de IntelliJ que llegaron aquí: agregue una condición al punto de interrupción en Ejecutar | Ver puntos de interrupción ... | Cualquier excepción: return !(this instanceof org.springframework.boot.devtools.restart.SilentExitExceptionHandler.SilentExitException);debe ser Java incluso si se desarrolla en otro lenguaje JVM.
Marco Eckstein

Respuestas:

127

Desafortunadamente, este es un problema conocido con el nuevo spring-boot-devtoolsmódulo (consulte https://github.com/spring-projects/spring-boot/issues/3100 ). Usamos este truco para matar el hilo principal de modo que podamos reemplazarlo con una versión recargable. Hasta ahora no he encontrado una manera de evitar que se active el punto de interrupción de depuración.

Por ahora, puede alternar la casilla de verificación "suspender la ejecución en excepciones no detectadas" en Java -> Preferencias de depuración para evitar que suceda.

Phil Webb
fuente
6
Este problema sigue presente, lamentablemente.
Stefan Falk
1
Este problema sigue presente.
Nabster
1
todavía presente: p
Sachin Sharma
2
Este problema sigue presente. usando la versión de Eclipse: 2019-06 (4.12.0) y spring-boot 2.0.6. Ventana-> Preferencias -.> Java -> Debig -> desmarcado "Suspender ejecución en excepciones no
detectadas
Todavía presente con Eclipse versión 2020-03 (4.15.0) y spring-boot 2.3.1
HDJEMAI
11

Como Eclipse en el modo de depuración ya permite un parche en caliente limitado, encuentro que el recargador es contraproducente la mayor parte del tiempo y decidí deshabilitarlo de la siguiente manera:

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

Referencia: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart-disable

Dado que el cargador lanza esa excepción, esto también resuelve este problema. Tenga en cuenta que tendrá que usar el System.setPropertymétodo en lugar de configurarlo application.properties.

RichN
fuente
8

Agregue la propiedad como un argumento de VM en la configuración como:

ingrese la descripción de la imagen aquí

De esa manera, no tiene que cambiar su código, como es el caso cuando usa:

System.setProperty("spring.devtools.restart.enabled", "false");
xbranko
fuente
De entre otras opciones, utilicé esta. ¡Muchas gracias por alegrarme el día!
Sivakadi
2

Mi solución:

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);
        }
    }
}

No importa que ignoremos SilentExitExceptionporque las devtools solo están reiniciando la instancia con un SilentExitExceptionque no es muy silencioso. Este bloque de prueba lo silenciará ...

Tuve que usar la coincidencia de texto en la clase ya que SilentExitExceptiones privado en SilentExitExceptionHandler.

No resuelve tu problema con el punto de interrupción ...

Dan Thomas
fuente
1

Intente ejecutar devtools en el tiempo de ejecución del alcance:

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