2012-02-10 9 views
5

Estoy desarrollando una aplicación Spring, y me preguntaba si existe una parte del framework que me permita hacer algo como esto de una manera más elegante, como configurar algo en XML.Thread.setDefaultUncaughtExceptionHandler en Spring

+0

¿En qué contexto? ¿Qué problema real estás tratando de resolver? – skaffman

+0

Lo siento, debería haber elaborado. En este caso, estoy escribiendo un controlador de excepción no capturado que escribe el seguimiento de la pila en mi archivo log4j. Si bien fue sencillo de implementar, me preguntaba si había una "forma de primavera" de hacer las cosas. – mogronalol

Respuesta

5

Si el propósito de su pregunta es establecer una costumbre UncaughtExceptionHandler a través de su contexto de aplicación, puede utilizar:

<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 reemplazar myhandler con un Thread.UncaughtExceptionHandler de elección ...)

+1

¿Esta es la "forma más elegante"? ¿Cómo es esto mejor que hacerlo en Java? – skaffman

+0

Sin contexto, realmente no tengo una opinión sobre si es elegante o no, pero puedo ver el razonamiento de hacer esto en lugar de crear una clase Java separada solo para configurar el controlador de excepciones no detectadas al inicio. – beny23

+0

Creo que esto es más elegante, ya que configurar el controlador forma parte de la configuración de la aplicación, que se supone que el control de la primavera está en control. – mogronalol

1

Usted también puede usar @ControllerAdvice clases anotadas para el manejo de excepciones no detectadas. Al hacer referencia desde https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc, el siguiente código detectará cualquier excepción:

@ControllerAdvice 
public class MyUncaughtExceptionHandler { 

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