web-dev-qa-db-ja.com

Eclipse + Spring Bootの「throw new SilentExitException()」でのブレークポイント

Eclipse IDE(Spring Tool Suite))でデバッグモードでSpring Bootプロジェクトを実行するたびに、ブレークポイントがなくても「throw new SilentExitException();」行でスレッドが停止します。

この動作を回避するための解決策はありますか?

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

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

これは、1.3.0マイルストーンへのアップグレード後に発生し始めます。

Spring Tool Suiteバージョン:3.7.0.RELEASEビルドID:201506290649プラットフォーム:Eclipse Luna SR2(4.4.2)

残念ながら、これは新しいspring-boot-devtoolsモジュールの既知の問題です( https://github.com/spring-projects/spring-boot/issues/31 を参照)。このトリックを使用してメインスレッドを強制終了し、再読み込み可能なバージョンに置き換えることができます。これまでのところ、デバッグブレークポイントがトリガーされるのを防ぐ方法は見つかりませんでした。

今のところ、Java->デバッグ設定で発生しないように、キャッチされない例外で実行を中断する]チェックボックスを切り替えることができます。

87
Phil Webb

Eclipse on Debugモードではすでに限定的なホットパッチが許可されているため、ほとんどの場合、リローダーは非生産的であるため、次の方法で無効にすることにしました。

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メソッドを使用する必要があることに注意してください。

4
RichN

スコープランタイムでdevtoolsを実行してみてください:

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