2012-02-10 2 views
5

私はSpringアプリケーションを開発していますが、フレームワークの中にXMLのようなものを設定するなど、よりエレガントな方法でこれをやってくれるのだろうかと疑問に思っていましたか?SpringのThread.setDefaultUncaughtExceptionHandler

+0

あなたが解決しようとしている実際の問題は何ですか? – skaffman

+0

ごめんなさい。この場合、私はスタックトレースを私のlog4jファイルに書き込む未知の例外ハンドラを書いています。実装するのは簡単ですが、私は物事を行う "春の道"があるかどうか疑問に思っていました。 – mogronalol

答えて

5

あなたの質問の目的は、アプリケーションコンテキストからカスタムUncaughtExceptionHandlerを設定している場合は、あなたが使用することができます。

<bean id="myhandler" class="java.lang.ThreadGroup"> 
    <constructor-arg value="Test"/> 
</bean> 

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="java.lang.Thread"/> 
    <property name="targetMethod" value="setDefaultUncaughtExceptionHandler"/> 
    <property name="arguments"> 
    <list> 
     <ref bean="myhandler" /> 
    </list> 
    </property> 
</bean> 

(NBは選択肢のThread.UncaughtExceptionHandlerではmyHandlerを交換...)

+1

これは「よりエレガントな方法」ですか?これはJavaで行うよりもどのように優れていますか? – skaffman

+0

コンテキストなし私はそれがエレガントかどうかについての意見は本当にありませんでしたが、これを行う理由を、起動時にキャッチされない例外ハンドラを設定するために別個のJavaクラスを作成するのに対して見ることができます。 – beny23

+0

私はこれがよりエレガントだと思います。なぜなら、ハンドラの設定は、スプリングが制御オフになっているはずのアプリケーション設定の一部なのです。 – mogronalol

1

あなたは未知の例外処理のために注釈付きクラスを@ControllerAdviceで使用することもできます。 https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvcから参照すると、次のコードで例外が発生します。

@ControllerAdvice 
public class MyUncaughtExceptionHandler { 

    @ExceptionHandler(value = Exception.class) 
    public void defaultExceptionHandler(Exception e) { 
     // do whatever you want with the exception 
    } 
} 
関連する問題