springboot mybatis 多資料來源配置

來源:互聯網
上載者:User

標籤:date   org   cti   man   boot   nbsp   就是   set   create   

首先匯入mybatis等包,這裡就不多說。

下面是配置多資料來源和mybatis,每個資料來源對應一套mybatis模板

 

資料來源1:

 

 1 package com.aaaaaaa.config.datasource; 2  3 import javax.sql.DataSource; 4  5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.mybatis.spring.SqlSessionFactoryBean; 7 import org.mybatis.spring.SqlSessionTemplate; 8 import org.mybatis.spring.annotation.MapperScan; 9 import org.springframework.beans.factory.annotation.Qualifier;10 import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;11 import org.springframework.boot.context.properties.ConfigurationProperties;12 import org.springframework.context.annotation.Bean;13 import org.springframework.context.annotation.Configuration;14 import org.springframework.context.annotation.Primary;15 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;16 import org.springframework.jdbc.datasource.DataSourceTransactionManager;17 18 /**19  * 20  * @desc 支援多資料來源配置,複製一份代碼修改所有appdb即可<br>21  *       以該資料來源為主要資料源。只能設定@Primary到一份資料來源作為主要資料源22  * @author josnow23  * @date 2018年1月12日 下午9:58:1824  * @version 1.0.025  */26 @Configuration27 @MapperScan(basePackages = "com.aaaaaaa.mapper.appdb", sqlSessionTemplateRef = "appdbSqlSessionTemplate")28 public class DataSourceConfigappdb {29 30     @Bean(name = "appdbDataSource")31     @ConfigurationProperties(prefix = "spring.datasource.appdb")32     @Primary33     public DataSource testDataSource() {34         return DataSourceBuilder.create().build();35     }36 37     @Bean(name = "appdbSqlSessionFactory")38     @Primary39     public SqlSessionFactory testSqlSessionFactory(@Qualifier("appdbDataSource") DataSource dataSource)40             throws Exception {41         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();42         bean.setDataSource(dataSource);43         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/appdb/*.xml"));44         return bean.getObject();45     }46 47     @Bean(name = "appdbTransactionManager")48     @Primary49     public DataSourceTransactionManager testTransactionManager(@Qualifier("appdbDataSource") DataSource dataSource) {50         return new DataSourceTransactionManager(dataSource);51     }52 53     @Bean(name = "appdbSqlSessionTemplate")54     @Primary55     public SqlSessionTemplate testSqlSessionTemplate(56             @Qualifier("appdbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {57         return new SqlSessionTemplate(sqlSessionFactory);58     }59 60 }

 

就這樣配置完了第一個資料來源和mybatis。

第一個資料來源由appdbTransactionManager來管理事務,在使用事務的時候用@Transactional(value = "appdbTransactionManager")註解來表明使用哪個交易管理員。

這裡並未採用分散式交易管理器,分散式交易管理器是個大話題,如果你考慮分散式交易可以自己改造。

 

下面進行第二個資料來源和mybatis的配置

 1 package com.aaaaaaa.config.datasource; 2  3 import javax.sql.DataSource; 4  5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.mybatis.spring.SqlSessionFactoryBean; 7 import org.mybatis.spring.SqlSessionTemplate; 8 import org.mybatis.spring.annotation.MapperScan; 9 import org.springframework.beans.factory.annotation.Qualifier;10 import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;11 import org.springframework.boot.context.properties.ConfigurationProperties;12 import org.springframework.context.annotation.Bean;13 import org.springframework.context.annotation.Configuration;14 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;15 import org.springframework.jdbc.datasource.DataSourceTransactionManager;16 17 @Configuration18 @MapperScan(basePackages = "com.aaaaaaa.mapper.testdb", sqlSessionTemplateRef = "testdbSqlSessionTemplate")19 public class DataSourceConfigtestdb {20 21     @Bean(name = "testdbDataSource")22     @ConfigurationProperties(prefix = "spring.datasource.testdb")23     public DataSource testDataSource() {24         return DataSourceBuilder.create().build();25     }26 27     @Bean(name = "testdbSqlSessionFactory")28     public SqlSessionFactory testSqlSessionFactory(@Qualifier("testdbDataSource") DataSource dataSource)29             throws Exception {30         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();31         bean.setDataSource(dataSource);32         bean.setMapperLocations(33                 new PathMatchingResourcePatternResolver().getResources("classpath:mapper/testdb/*.xml"));34         return bean.getObject();35     }36 37     @Bean(name = "testdbTransactionManager")38     public DataSourceTransactionManager testTransactionManager(@Qualifier("testdbDataSource") DataSource dataSource) {39         return new DataSourceTransactionManager(dataSource);40     }41 42     @Bean(name = "testdbSqlSessionTemplate")43     public SqlSessionTemplate testSqlSessionTemplate(44             @Qualifier("testdbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {45         return new SqlSessionTemplate(sqlSessionFactory);46     }47 48 }

 

看一下兩個資料來源有哪些不同之處:

1:資料來源2其實是由資料來源1copy了一份代碼,並將全部appdb改為testdb

2:此外資料來源1有@Primary註解,而資料來源2沒有@Primary註解。使用@Primary註解是將資料來源1作為預設資料來源,並且多個資料來源必須指定一個預設的資料來源,否則會啟動報錯。

 

mybatis多資料來源就是這麼簡單

springboot mybatis 多資料來源配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.