標籤: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 多資料來源配置