2012-02-10 10 views
5

스프링 애플리케이션을 개발 중입니다. 프레임 워크에서 XML로 구성하는 것과 같이 좀 더 우아한 방식으로 처리해 줄 수 있는지 궁금합니다. 질문의 목적은 당신의 애플리케이션 컨텍스트를 통해 사용자 정의 UncaughtExceptionHandler을 설정하는 경우Spring의 Thread.setDefaultUncaughtExceptionHandler

+0

어떤 컨텍스트에서? 실제 문제는 무엇을 해결하려고합니까? – skaffman

+0

미안하지만 정교해야합니다. 이 경우 스택 추적을 log4j 파일에 쓰는 캐치되지 않는 예외 처리기를 작성하고 있습니다. 구현하는 동안 나는 일을하는 "봄의 길"이 있는지 궁금해하고있었습니다. – mogronalol

답변

5

, 당신은 사용할 수 있습니다

<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> 

+1

이것은 "더 우아한 방법"입니까? 자바로하는 것보다이게 낫지? – skaffman

+0

컨텍스트가 없으면 나는 그것이 우아한 것인지 아닌지에 대한 의견을 정말로 얻지는 못했지만, 시작과 동시에 잡히지 않는 예외 핸들러를 설정하기 위해 별도의 Java 클래스를 생성하는 대신 이것을 수행하는 이유를 알 수 있습니다. – beny23

+0

핸들러를 설정하는 것이 스프링이 제어를 중지해야하는 응용 프로그램 구성의 일부이기 때문에 이것이 더 우아하다고 생각합니다. – mogronalol

1

당신을 (NB는 ... 선택의 Thread.UncaughtExceptionHandler에 myHandler가 대체) 또한 캐치되지 않는 예외 처리를 위해 @ControllerAdvice 주석이있는 클래스를 사용할 수 있습니다. https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc에서 다음 코드를 참조하면 예외를 catch합니다.

@ControllerAdvice 
public class MyUncaughtExceptionHandler { 

    @ExceptionHandler(value = Exception.class) 
    public void defaultExceptionHandler(Exception e) { 
     // do whatever you want with the exception 
    } 
}