Jedes Mal, wenn ich mein Spring Boot-Projekt im Debug-Modus in Eclipse IDE (Spring Tool Suite) ausführe, stoppt der Thread throw new SilentExitException();
auch ohne Haltepunkt an der Zeile.
Gibt es eine Lösung, um dieses Verhalten zu vermeiden?
org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread() (line 53):
public static void exitCurrentThread() {
throw new SilentExitException();
}
Dies geschieht nach dem Upgrade auf 1.3.0 Milestones.
Spring Tool Suite
Version: 3.7.0.RELEASE
Build Id: 201506290649
Plattform:
Eclipse Luna SR2 (4.4.2)
java
eclipse
spring-boot
breakpoints
Bruno De Freitas Barros
quelle
quelle
return !(this instanceof org.springframework.boot.devtools.restart.SilentExitExceptionHandler.SilentExitException);
Dies muss Java sein, auch wenn Sie in einer anderen JVM-Sprache entwickeln.Antworten:
Dies ist leider ein bekanntes Problem mit dem neuen
spring-boot-devtools
Modul (siehe https://github.com/spring-projects/spring-boot/issues/3100 ). Wir verwenden diesen Trick, um den Haupt-Thread zu beenden, damit wir ihn durch eine wieder ladbare Version ersetzen können. Bisher habe ich keine Möglichkeit gefunden, das Auslösen des Debug-Haltepunkts zu verhindern.Im Moment können Sie das Kontrollkästchen "Ausführung bei nicht erfassten Ausnahmen anhalten" in Java -> Debug-Einstellungen umschalten, um dies zu verhindern.
quelle
Da der Eclipse on Debug-Modus bereits begrenztes Hotpatching zulässt, ist der Reloader die meiste Zeit kontraproduktiv. Daher habe ich beschlossen, ihn zu deaktivieren, indem ich:
System.setProperty("spring.devtools.restart.enabled", "false");
Referenz: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-restart-disable
Da diese Ausnahme vom Reloader ausgelöst wird, wird auch dieses Problem behoben. Beachten Sie, dass Sie die
System.setProperty
Methode verwenden müssen, anstatt sie festzulegenapplication.properties
.quelle
Fügen Sie die Eigenschaft als VM-Argument in die Konfiguration ein:
Auf diese Weise müssen Sie Ihren Code nicht ändern, wie dies bei der Verwendung von:
System.setProperty("spring.devtools.restart.enabled", "false");
quelle
Meine Problemumgehung:
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); } } }
Es spielt keine Rolle, dass wir das ignorieren,
SilentExitException
da die devtools die Instanz nur mit a neu startenSilentExitException
nicht sehr leisen . Dieser Versuchsblock wird es zum Schweigen bringen ...Ich musste Textabgleich für die Klasse verwenden, da diese
SilentExitException
privat istSilentExitExceptionHandler
.Es löst Ihr Problem mit dem Haltepunkt nicht ...
quelle
Versuchen Sie, devtools zur Laufzeit des Bereichs auszuführen:
quelle