2012-02-10 14 views
5

मैं एक स्प्रिंग एप्लिकेशन विकसित कर रहा हूं, और सोच रहा था कि ढांचे का एक हिस्सा है जो मुझे इस तरह कुछ और शानदार तरीके से ऐसा करने देता है, जैसे एक्सएमएल में कुछ कॉन्फ़िगर करना?Thread.setDefaultUncaughtException वसंत में हैंडलर

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

(एनबी पसंद के किसी Thread.UncaughtExceptionHandler साथ myhandler की जगह ...)

+1

यह "अधिक सुरुचिपूर्ण तरीका" है? जावा में ऐसा करने से बेहतर कैसे है? – skaffman

+0

संदर्भ के बिना मुझे वास्तव में कोई राय नहीं मिली है कि यह सुरुचिपूर्ण है या नहीं, लेकिन मैं स्टार्टअप पर बेजोड़ अपवाद हैंडलर सेट करने के लिए एक अलग जावा क्लास बनाने के विरुद्ध ऐसा करने का तर्क देख सकता हूं। – 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 
    } 
} 
संबंधित मुद्दे