2012-09-26 11 views
5

मैं दो लेन-देन प्रबंधक दो अलग-अलग वसंत xml फ़ाइल में परिभाषित किया है, और उन दोनों को वसंत संदर्भ में लोडवसंत कई लेन-देन प्रबंधक मुद्दा

फ़ाइल एक

<tx:annotation-driven transaction-manager="transactionManager1"/> 

    <bean id="transactionManager1" 
     class="org.springframework.jdbc.DataSourceTransactionManager"> 
    ... 
    </bean> 

फ़ाइल दो

<tx:annotation-driven transaction-manager="transactionManager2"/> 
    <bean id="transactionManager2" 
      class="org.springframework.jdbc.DataSourceTransactionManager"> 
    ... 
    </bean> 

यदि मैंने नीचे दी गई सेवा के लिए कोई क्वालीफायर इंगित नहीं किया है, तो कौन सा लेनदेन प्रबंधक वसंत उपयोग करने जा रहा है।

public class TransactionalService { 

    @Transactional 
    public void setSomething(String name) { ... } 

    @Transactional 
    public void doSomething() { ... } 
} 

उत्तर

13

चेक बाहर आधिकारिक दस्तावेज से 11.5.6 Using @Transactional:

आप <tx:annotation-driven/> टैग में transaction-manager विशेषता छोड़ सकते हैं अगर PlatformTransactionManager है कि आप में तार करना चाहते हैं सेम नाम नाम transactionManager है। PlatformTransactionManager सेम है कि आप निर्भरता इंजेक्षन करने के लिए किसी अन्य नाम है चाहते हैं, तो आप स्पष्ट रूप से transaction-manager विशेषता का उपयोग करना है, तो [...]

के बाद से तुम्हारा लेन-देन के प्रबंधकों में से कोई भी transactionManager नाम हैं, आप निर्दिष्ट करना होगा जो @Transactional के साथ चिह्नित विधियों के लिए लेनदेन प्रबंधक का उपयोग किया जाना चाहिए।


अद्यतन: आपके संशोधित प्रश्न को संबोधित करने के लिए। आप जो लेन-देन प्रबंधक @Transactional एनोटेशन पर उपयोग करने के लिए निर्दिष्ट कर सकते हैं (देखें: @Transactional.value()):

@Transactional("transactionManager1") 
//... 

@Transactional("transactionManager2") 
//... 

हालांकि मैं अपने मौजूदा सेटअप के साथ कई समस्याएं देखें:

  • आप विभिन्न लेन-देन प्रबंधकों के साथ दो बार <tx:annotation-driven/> परिभाषित करते हैं। मुझे नहीं लगता कि इस तरह की कॉन्फ़िगरेशन मान्य है

  • स्पष्ट रूप से लेनदेन प्रबंधक प्रदान किए बिना, किस का उपयोग किया जाना चाहिए?

समाधान मुझे लगता है कि काम करना चाहिए एक बार <tx:annotation-driven transaction-manager="transactionManager1"/> को परिभाषित करने और @Transactional का उपयोग एक दूसरे का उपयोग करने के पहले प्रबंधक और @Transactional("transactionManager2") का उपयोग करने के लिए है। या फिर इसके विपरीत।

+0

ठीक है, मैंने अपने प्रश्न में कुछ संशोधन किया है, वास्तव में यह वह मुद्दा है जिसका मैं सामना कर रहा हूं। – user1330526

+0

@ user1330526: मेरे अपडेट देखें –

+0

मुझे एकाधिक लेनदेन प्रबंधकों के लिए एकाधिक '' परिभाषित करने की आवश्यकता है, अन्यथा वसंत मेरे लेनदेन प्रबंधक नहीं देख सकता है। –