2015-01-16 5 views
5

स्प्रिंग के @Async एनोटेशन का उपयोग करते समय, विधि के throws खंड में अपवादों (चेक) अपवादों की बात आती है, तो अवशोषण कमजोर होता है। कंपाइलर कॉलर को अपवाद को संभालने के लिए मजबूर करेगा, लेकिन वास्तविकता में कॉलर को @Async विधि द्वारा फेंकने वाले अपवाद कभी नहीं दिखाई देंगे। इसके बजाय, कार्यान्वयन के आधार पर, इसे & को वसंत द्वारा लॉग किया जाएगा, या उपयोगकर्ता द्वारा कॉन्फ़िगर किए गए अपवाद हैंडलर को दिया जाएगा, या Future#get() को वापसी मान पर कॉल किया जाता है।स्प्रिंग @ एसिंक एब्स्ट्रक्शन अपवाद हैंडलिंग

इसलिए, मैं राय बना रहा हूं कि @Async विधियों को एक नियम के रूप में, कभी भी अपवादों को फेंकना नहीं चाहिए। इसके बजाय, उन्हें सभी चेक अपवादों को RuntimeException के प्रकारों में लपेटना चाहिए ताकि throws खंड मौजूद न हो।

क्या यह एक सटीक मूल्यांकन है? क्या कोई उपकरण या प्रोग्रामिंग दृष्टिकोण है जो रिसाव को ठीक करता है? क्या किसी को यह पता चल जाता है कि वसंत डेवलपर्स इस बारे में क्या सोचते हैं, या यदि स्थिति में सुधार करने की कोई योजना है? धन्यवाद!

संभवतः संबंधित: Spring Async method hides exceptions

+1

सामान्य शब्दों में, वसंत अनियंत्रित अपवाद (स्प्रिंग डाटा में अपवाद अनुवाद को देखो) पसंद है, और यह एक के लिए संभव वास्तव में नहीं है कुछ भी फेंकने के लिए async विधि (यही कारण है कि 'भविष्य' अपवाद अपवाद)। – chrylis

+0

असली समस्या तब शुरू होती है जब आपकी @ Asynced विधि कोई मान वापस नहीं करती है। कुछ दिलचस्प चीजें तब होती हैं;) –

+0

विशेष रूप से दिलचस्प चीजें, आर 4 जे? – Jukka

उत्तर

2

आपका मूल्यांकन शायद सही है।

अब, आप ने कहा कि अपवाद को संभालने के लिए चाहते हैं, तो बस इस कार्य करें:

@Async 
void mangle() { 
    try { 
     doMangle(); 
    } catch (YourCheckedException e) { 
     // Handle it 
    } 
} 

void doMangle() throws YourCheckedException { 
    ... 
} 
संबंधित मुद्दे