SpringBoot多資料來源以及多資料來源事物
阿新 • • 發佈:2018-12-19
請耐心看完
注意:本示例用的是springboot2.0
你們在專案中有使用到多資料來源嗎?
原理使用根據包名,載入不同的資料來源,也可以根據註解載入不同的資料來源
直接奔向主題,請繫好安全帶!!!
配置兩個不同的資料來源
#datasource1 spring.datasource.test1.driver-class-name = com.mysql.jdbc.Driver spring.datasource.test1.jdbc-url = jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8 spring.datasource.test1.username = root spring.datasource.test1.password = root #datasource2 spring.datasource.test2.driver-class-name = com.mysql.jdbc.Driver spring.datasource.test2.jdbc-url = jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8 spring.datasource.test2.username = root spring.datasource.test2.password = root
彆著急,先看一下專案結構
可以看到定義了兩個mapper包,放不同的業務
配置類分別載入兩個資料來源,這裡都是寫死的,可以直接copy來用噢
package cn.ly.dataSource; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; //配置01資料來源 //這是一個配置檔案 @Configuration //指定cn.ly.service1包用test1資料來源,test1SqlSessionFactory下面有配置 @MapperScan(basePackages = "cn.ly.mapper1", sqlSessionFactoryRef = "test1SqlSessionFactory") public class DataSource1Config { /** * * @methodDesc: 功能描述:(配置test1資料庫) * @author: Ly */ @Bean(name = "test1DataSource") @ConfigurationProperties(prefix = "spring.datasource.test1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } /** * * @methodDesc: 功能描述:(test1 sql會話工廠) * @author: Ly */ @Bean(name = "test1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //這裡可以指定掃描mapper檔案 // bean.setMapperLocations( // new // PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml")); return bean.getObject(); } /** * * @methodDesc: 功能描述:(test1 事物管理) * @author: Ly */ @Bean(name = "test1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
package cn.ly.dataSource; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; //配置e02資料來源 //這是一個配置檔案 @Configuration //指定cn.ly.service1包用test2資料來源,test2SqlSessionFactory下面有配置 @MapperScan(basePackages = "cn.ly.mapper2", sqlSessionFactoryRef = "test2SqlSessionFactory") public class DataSource2Config { /** * * @methodDesc: 功能描述:(配置test2資料庫) * @author: Ly */ @Bean(name = "test2DataSource") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } /** * * @methodDesc: 功能描述:(test2 sql會話工廠) * @author: Ly */ @Bean(name = "test2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //這裡可以指定掃描mapper檔案 // bean.setMapperLocations( // new // PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml")); return bean.getObject(); } /** * * @methodDesc: 功能描述:(test2 事物管理) * @author: Ly */ @Bean(name = "test2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate( @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
看清除噢,這裡主要說明了哪個mapper包用哪個資料來源
Mapper層
Service層
分別呼叫不懂的mapper
Controller層
ok完事,看懂的麻煩點個贊