2011-11-10 15 views
5

में रनटाइम के दौरान मूल्य मैं वसंत MVC उपयोग कर रहा हूँ + दो डेटाबेससेम बदलें संपत्ति/वसंत

इसलिए उदाहरण के लिए हाइबरनेट +: मैं 2 sessionFactories पैदा करते हैं। sessionFactory1 (datasource1 का उपयोग करके) और sessionFactory2 (datasource2 का उपयोग करके)।

रनटाइम पर sessionFactory में sessionFactory1 या sessionFactory2 को बदलना संभव होगा ताकि दाओ/एस उनका संदर्भ दे। sessionFactory पहले से ही सभी दाओ/एस के लिए स्वचालित है।

मैं अभी इसके लिए खोज रहा हूं मुझे लगता है कि @ कॉन्फ़िगरेशन मेरी मदद कर सकता है लेकिन मुझे यकीन नहीं है।

मैं सारराउटिंगडेटा स्रोत का प्रयास कर रहा हूं लेकिन ऐसा नहीं लगता कि इससे मदद मिलती है।

+0

कोई भी समाधान जानता है ?? – precursor

+0

यकीन नहीं है कि मैं इसे प्राप्त करता हूं, आप प्रत्येक डीएओ में सही कारखाने को इंजेक्ट कर सकते हैं? – aishwarya

+1

ठीक है अब मैं http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/ – precursor

उत्तर

1

आमतौर पर वसंत एप्लिकेशन स्टार्टअप पर आपके सेम तारों को तारित करता है, इसलिए "पुनः तारों" (रनटाइम पर sessionFactory2 के संदर्भों के साथ sessionFactory1 के संदर्भों को प्रतिस्थापित करना) लागू करना आसान प्रतीत नहीं होता है।

शायद आप एक "प्रॉक्सी बीन" लागू कर सकते हैं जो आपके डीएओ ऑब्जेक्ट्स से वायर्ड है और आपके प्रॉक्सी बीन के "लक्ष्य सत्र कारखाना" को बदल सकता है।

0

सारराउटिंगडेटा स्रोत आपके लिए काम करेगा।

सबसे पहले आप एक वर्ग है कि प्रयोग में वर्तमान DB स्टोर करेगा बनाने की आवश्यकता होगी:

public class MyContextHolder { 

    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); 

    public static void setDBContext(String dBContext) { 
     contextHolder.set(dBContext); 
    } 

    public static String getDBContext() { 
     return (String) contextHolder.get(); 
    } 

    public static void clearDBContext() { 
     contextHolder.remove(); 
    } 

} 

आप एक वर्ग है कि यह एक प्रदान करता है और determineCurrentLookupKey() को लागू करता है बनाने के लिए और वापसी की आवश्यकता होगी, वर्तमान db आप अपने संदर्भ धारक में है:

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 

public class MyRoutingDataSource extends AbstractRoutingDataSource { 

    @Override 
    protected Object determineCurrentLookupKey() { 
     return MyContextHolder.getDBContext(); 
    } 
} 

http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/ में उदाहरण देखें। यह मेरे लिए ठीक काम किया।

संबंधित मुद्दे