अद्यतन 2018-01-07 स्प्रिंग बूट 1.5.8 के साथ। कृपया
अधिकांश उत्तर प्रदान नहीं करते हैं कि उन्हें कैसे उपयोग किया जाए (जैसा कि डेटासोर्स स्वयं और लेनदेन के रूप में), केवल उन्हें कॉन्फ़िगर कैसे करें।
आप रन करने योग्य उदाहरण और https://www.surasint.com/spring-boot-with-multiple-dat डेटाबेस-example/ में कुछ स्पष्टीकरण देख सकते हैं
मैंने यहां कुछ कोड कॉपी किए।
सबसे पहले आपको application.properties को इस तरह सेट करना होगा
#Database
database1.datasource.url=jdbc:mysql://localhost/testdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.driver-class-name=com.mysql.jdbc.Driver
database2.datasource.url=jdbc:mysql://localhost/testdb2
database2.datasource.username=root
database2.datasource.password=root
database2.datasource.driver-class-name=com.mysql.jdbc.Driver
फिर उन्हें इस तरह प्रदाता (@ बीन) के रूप में परिभाषित करें:
@Bean(name = "datasource1")
@ConfigurationProperties("database1.datasource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "datasource2")
@ConfigurationProperties("database2.datasource")
public DataSource dataSource2(){
return DataSourceBuilder.create().build();
}
ध्यान दें कि मेरे पास @Bean (नाम = "datasource1") और @Bean (नाम = "datasource2") है, तो आप इसे तब उपयोग कर सकते हैं जब हमें @Qualifier ("datasource1") और @Qualifier ("datasource2") के रूप में डेटा स्रोत चाहिए। उदाहरण के लिए
@Qualifier("datasource1")
@Autowired
private DataSource dataSource;
यदि आप लेनदेन के बारे में परवाह करते हैं, तो आपको इन दोनों के लिए DataSourceTransactionManager को परिभाषित करना होगा, जैसे:
@Bean(name="tm1")
@Autowired
@Primary
DataSourceTransactionManager tm1(@Qualifier ("datasource1") DataSource datasource) {
DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
return txm;
}
@Bean(name="tm2")
@Autowired
DataSourceTransactionManager tm2(@Qualifier ("datasource2") DataSource datasource) {
DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
return txm;
}
फिर आप इसका उपयोग कर सकते हैं
@Transactional //this will use the first datasource because it is @primary
या
@Transactional("tm2")
यह पर्याप्त होना चाहिए। ऊपर दिए गए लिंक में उदाहरण और विवरण देखें।