# multiDataSourceDemo **Repository Path**: kakalex/multiDataSourceDemo ## Basic Information - **Project Name**: multiDataSourceDemo - **Description**: spring boot多数据源配置 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README spring boot多数据源配置 在config中配置两个数据源,配置`@MapperScan`扫描不同的包 ```java // ConfigDB1 @Configuration @MapperScan(value = "com.alex.demo.db1.dao",sqlSessionFactoryRef = "db1SqlSessionFactoryBean") public class ConfigDB1 { @Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源) @Bean("db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") //读取application.yml中的配置参数映射成为一个对象 public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean("db1SqlSessionFactoryBean") public SqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("db1DataSource") DataSource dataSource) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db1/*.xml")); return sqlSessionFactoryBean; } } // ConfigDB2 @Configuration @MapperScan(value = "com.alex.demo.db2.dao",sqlSessionFactoryRef = "db2SqlSessionFactoryBean") public class ConfigDB2 { @Bean("db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") //读取application.yml中的配置参数映射成为一个对象 public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Bean("db2SqlSessionFactoryBean") public SqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("db2DataSource") DataSource dataSource) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resourceResolver.getResources("mybatis/db2/*.xml")); return sqlSessionFactoryBean; } } ``` 在spring.properties中添加配置参数 ```properties spring: datasource: db1: # 数据源1 jdbc-url: jdbc:mysql://localhost:3310/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver db2: # 数据源2 jdbc-url: jdbc:mysql://localhost:3320/XA?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` 配置好后注入不同的Mapper代表不同的数据源 ```java @Service public class XAService { @Resource private XADB1Mapper XADB1Mapper; @Resource private XADB2Mapper XADB2Mapper; public void testXA() { XADB1 XADB1 = new XADB1(); XADB1.setId(2); XADB1.setName("xa_db1"); XADB1Mapper.insert(XADB1); XADB2 XADB2 = new XADB2(); XADB2.setId(2); XADB2.setName("xa_db2"); XADB2Mapper.insert(XADB2); } } ```