springboot mybatis 多數據源配置
阿新 • • 發佈:2018-02-13
進行 figure resource path can sca mar pre esc
首先導入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 josnow 23 * @date 2018年1月12日 下午9:58:18 24 * @version 1.0.0 25 */ 26 @Configuration 27 @MapperScan(basePackages = "com.aaaaaaa.mapper.appdb", sqlSessionTemplateRef = "appdbSqlSessionTemplate") 28 public class DataSourceConfigappdb { 29 30 @Bean(name = "appdbDataSource") 31 @ConfigurationProperties(prefix = "spring.datasource.appdb") 32 @Primary 33 public DataSource testDataSource() { 34 return DataSourceBuilder.create().build(); 35 } 36 37 @Bean(name = "appdbSqlSessionFactory") 38 @Primary 39 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 @Primary 49 public DataSourceTransactionManager testTransactionManager(@Qualifier("appdbDataSource") DataSource dataSource) { 50 return new DataSourceTransactionManager(dataSource); 51 } 52 53 @Bean(name = "appdbSqlSessionTemplate") 54 @Primary 55 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 @Configuration 18 @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 多數據源配置