Eclipse IDE (Spring Tool Suite)의 디버그 모드에서 Spring Boot 프로젝트를 실행할 때마다 throw new SilentExitException();
중단 점 없이도 스레드가 줄 에서 멈 춥니 다 .
이 동작을 피할 수있는 해결책이 있습니까?
org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread() (line 53):
public static void exitCurrentThread() {
throw new SilentExitException();
}
이것은 1.3.0 마일스톤으로 업그레이드 한 후에 시작됩니다.
스프링 도구 모음
Version: 3.7.0.RELEASE
Build Id: 201506290649
플랫폼:
Eclipse Luna SR2 (4.4.2)
답변
이것은 안타깝게도 새 spring-boot-devtools
모듈 의 알려진 문제입니다 ( https://github.com/spring-projects/spring-boot/issues/3100 참조 ). 이 트릭을 사용하여 메인 스레드를 종료하여 다시로드 할 수있는 버전으로 교체 할 수 있습니다. 지금까지 디버그 중단 점이 트리거되는 것을 방지하는 방법을 찾지 못했습니다.
지금은 Java-> 디버그 환경 설정에서 “발견되지 않은 예외에 대한 실행 일시 중지”확인란을 토글하여 발생하지 않도록 할 수 있습니다.
답변
Eclipse on Debug 모드는 이미 제한된 핫 패칭을 허용하기 때문에 리 로더가 대부분의 경우 비생산적이라는 것을 알게되었고 다음과 같이 비활성화하기로 결정했습니다.
System.setProperty("spring.devtools.restart.enabled", "false");
이 예외는 리 로더에 의해 발생하므로이 문제도 해결됩니다. System.setProperty
에서 설정하는 대신 방법 을 사용해야합니다 application.properties
.
답변
답변
내 해결 방법 :
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
devtools가 SilentExitException
별로 조용하지 않은 인스턴스를 다시 시작하기 때문에를 무시해도 상관 없습니다. 이 try 블록은 그것을 침묵시킵니다 …
SilentExitException
에서 비공개이므로 클래스에서 텍스트 일치를 사용해야 했습니다 SilentExitExceptionHandler
.
중단 점으로 문제를 해결하지 못합니다 …
답변
범위 런타임에서 devtools를 실행하십시오.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>