मैं एक विधि propagation = Propagation.REQUIRES_NEW
व्यवहार संपत्ति है कि है:स्प्रिंग लेन-देन बनाम REQUIRES_NEW आवश्यक: रोलबैक लेन-देन
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(final UserBean userBean) {
//Some logic here that requires modification in DB
}
इस विधि को कई बार एक साथ कहा जा सकता है, और प्रत्येक लेनदेन के लिए की तुलना में एक त्रुटि होती है तो यह वापस लुढ़का है (स्वतंत्र रूप से अन्य लेनदेन से)।
समस्या यह है कि यह वसंत को कई लेनदेन बनाने के लिए मजबूर कर सकता है, भले ही कोई दूसरा उपलब्ध हो, और कुछ प्रदर्शन समस्याएं हो सकती हैं।
propagation = Propagation.REQUIRED
के जावा दस्तावेज़ का कहना है: Support a current transaction, create a new one if none exists.
इस प्रदर्शन समस्या को हल करने लगता है, यह नहीं है कि यह?
रोलबैक मुद्दे के बारे में क्या? यदि मौजूदा लेनदेन का उपयोग करते समय कोई नई विधि कॉल वापस आती है तो क्या होगा? क्या वह पूरे लेनदेन को पिछली कॉल भी नहीं करेगा?
[संपादित करें] मुझे लगता है कि मेरे सवाल का काफी स्पष्ट नहीं था:
हम अपने सर्वर से कनेक्ट ग्राहकों के सैकड़ों है।
प्रत्येक ग्राहक के लिए हमें स्वाभाविक रूप से लेनदेन (ठीक या अपवाद -> रोलबैक) के बारे में प्रतिक्रिया भेजने की आवश्यकता होती है।
मेरा प्रश्न है: यदि मैं REQUIRED
का उपयोग करता हूं, तो इसका मतलब है कि केवल एक लेनदेन का उपयोग किया जाता है, और यदि 100 वें ग्राहक को किसी समस्या का सामना करना पड़ता है तो पहले ग्राहक का लेनदेन भी रोलबैक होगा?
जो कि विधि के हर बार नए लेनदेन बनाने के लिए, REQUIRES_NEW का बिंदु है। और हाँ, अगर आपको आवश्यकता है और लेनदेन वापस लुढ़का है, तो यह पूरी चीज वापस ले जाएगा। –
@DenisTulskiy पूरी चीज उस फॉनक्शन, या वर्तमान कॉल स्टैक के लिए हर पिछली कॉल होने जा रही है? –
@jidma: पूरा लेनदेन, @ यूजीन का उत्तर देखें, यदि 'createUser' आपके क्लाइंट कोड का पहला तरीका है, तो REQUIRES_NEW और आवश्यक एक ही चीज़ –