2016-05-17 4 views
5

हम अपने स्प्रिंग बूट आधारित ऐप में डीबी माइग्रेशन के लिए फ्लाईवे का उपयोग करते हैं और अब हमारे पास एकाधिक डेटा स्रोत रणनीति का उपयोग करते समय बहु किरायेदारी समर्थन पेश करने की आवश्यकता है। इसके हिस्से के रूप में हमें कई डेटा स्रोतों के माइग्रेशन का समर्थन करने की भी आवश्यकता है। सभी डेटा स्रोतों को एक ही संरचना को बनाए रखना चाहिए ताकि सभी डेटा स्रोतों के माइग्रेट करने के लिए माइग्रेशन स्क्रिप्ट का उपयोग किया जाना चाहिए। साथ ही, अनुप्रयोग स्टार्टअप पर माइग्रेशन होना चाहिए (निर्माण समय के विपरीत, जबकि ऐसा लगता है कि मैवेन प्लगइन को एकाधिक डेटा स्रोतों को माइग्रेट करने के लिए कॉन्फ़िगर किया जा सकता है)। इसे प्राप्त करने के लिए उपयोग करने का सबसे अच्छा तरीका क्या है? ऐप में पहले से ही डेटा स्रोत बीन्स परिभाषित हैं लेकिन फ्लाईवे केवल प्राथमिक डेटा स्रोत के लिए माइग्रेशन निष्पादित करता है।स्प्रिंग बूट एप्लिकेशन में फ्लाईवे का उपयोग करके एकाधिक डेटा स्रोत माइग्रेशन

उत्तर

4

फ्लाईवे जावा के भीतर कोडित माइग्रेशन का समर्थन करता है और इसलिए आप अपने एप्लिकेशन स्टार्टअप के दौरान फ्लाईवे शुरू कर सकते हैं।

https://flywaydb.org/documentation/migration/java 

मुझे यकीन नहीं है कि आप इसकी कॉन्फ़िगरेशन फ़ाइलों के माध्यम से कई डेटा स्रोतों को लक्षित करने के लिए फ्लाईवे कॉन्फ़िगर कैसे करेंगे। मेरा खुद का विकास जावा डेटा का उपयोग करके फ्लाईवे को कॉल करने के लिए आधारित है, प्रति डेटा स्रोत के बाद मुझे काम करने की आवश्यकता है। स्प्रिंग बूट @FlywayDataSource के रूप में चिह्नित बीन्स की ऑटोवायरिंग का समर्थन करता है, लेकिन मैंने यह नहीं देखा है कि इसका उपयोग कैसे किया जा सकता है।

एक में जावा समाधान कोड के रूप में सरल रूप में

Flyway flyway = new Flyway(); 

    // Set the data source 
    flyway.setDataSource(dataSource); 

    // Where to search for classes to be executed or SQL scripts to be found 
    flyway.setLocations("net.somewhere.flyway"); 

    flyway.setTarget(MigrationVersion.LATEST); 
    flyway.migrate(); 
+0

स्प्रिंग बूट बना सकते हैं और स्टार्टअप के दौरान तो पर सेम और चलाने के तरीकों कॉन्फ़िगर करने के लिए अनुकूली ऑटो विन्यास वर्गों की एक श्रृंखला पर निर्भर करता है। फ्लाईवे एक {org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration} पर पाया जा सकता है ताकि आप मूल रूप से इस वर्ग से आवश्यक कोड की प्रतिलिपि बना सकें। मैं बस एक ही चीज़ का प्रयास करने जा रहा हूं। – Luke

5

@Roger थॉमस स्प्रिंग बूट तरह से अधिक का जवाब करने के लिए हो सकता है के लिए:

सबसे आसान समाधान अपनी प्राथमिक डेटा स्रोत टिप्पणी करने के लिए है @Primary (जो आपने पहले से किया है) के साथ और बस बूटस्ट्रैप को अपने प्राथमिक डेटा स्रोत को 'सामान्य' तरीके से माइग्रेट करने दें।

अन्य datasources के लिए, हाथ से उन स्रोतों की ओर पलायन:

@Configuration 
public class FlywaySlaveInitializer { 

    @Autowired private DataSource dataSource2; 
    @Autowired private DataSource dataSource3; 
    //other datasources 

    @PostConstruct 
    public void migrateFlyway() { 
     Flyway flyway = new Flyway(); 
     //if default config is not sufficient, call setters here 

     //source 2 
     flyway.setDataSource(dataSource2); 
     flyway.migrate(); 

     //source 3 
     flyway.setDataSource(dataSource3); 
     flyway.migrate(); 
    } 
} 
संबंधित मुद्दे