SpringBoot Mybatis项目中的多数据源支持

1.概述

有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作。

有需要的同学可以下载 示例代码

项目结构如下:

SpringBoot Mybatis项目中的多数据源支持

2.建数据源

首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据

CREATE TABLE `groupidinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`groupId` varchar(255) DEFAULT NULL,
`version` varchar(255) DEFAULT NULL,
`cluster` varchar(255) DEFAULT NULL,
`timeout` int(11) DEFAULT NULL,
`retries` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

SpringBoot Mybatis项目中的多数据源支持

3.添加POM依赖

pom文件中添加项目依赖

 <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>

4.配置文件

application.properties 文件中添加数据库连接配制

spring.datasource.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.db1.username=root
spring.datasource.db1.password=123456
spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver spring.datasource.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/test1
spring.datasource.db2.username=root
spring.datasource.db2.password=123456
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver

5.配置文件

分别建立Db1DataSourceConfig,Db2DataSourceConfig,通过使用@MapperScan分别的两个数据源指定要扫描的Mapper类的包的路径,配置MapperLocations路径

@Configuration
@MapperScan(basePackages = "com.glory.study.dao.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1DataSourceConfig {
@Bean(name = "db1Data")
@ConfigurationProperties(prefix = "spring.datasource.db1") // application.properteis中对应属性的前缀
@Primary
public DataSource Db1DataSourceConfig() {
return DataSourceBuilder.create().build();
} @Bean(name = "db1SqlSessionFactory")
@Primary
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1Data") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/db1/*.xml"));
return bean.getObject();
} @Bean(name = "db1TransactionManager")
@Primary
public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1Data") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "db1SqlSessionTemplate")
@Primary
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}

6.添加数据库对应的实体类,并编写 Mybatis Mapper

直接写sql方式

@Mapper
@Repository
public interface GroupIdInfoDb1Mapper { @Select(" SELECT * FROM groupIdInfo WHERE id=#{id} limit 0,1;")
GroupIdInfo findById1(@Param("id") Integer id); }

Mapper XML方式

@Mapper
@Repository
public interface GroupIdInfoDb2Mapper { GroupIdInfo findById2(@Param("id") Integer id); }
<mapper namespace="com.glory.study.dao.mapper.db2.GroupIdInfoDb2Mapper">

    <select id="findById2" resultType="com.glory.study.model.GroupIdInfo">
SELECT * FROM groupIdInfo WHERE id=#{id} limit 0,1;
</select> </mapper>

7.编写调用Service

@Service
public class GroupIdInfoService { //数据源1
@Autowired
private GroupIdInfoDb1Mapper groupIdInfoDb1Mapper;
//数据源2
@Autowired
private GroupIdInfoDb2Mapper groupIdInfoDb2Mapper; public GroupIdInfo findById1(Integer id) throws Exception {
return groupIdInfoDb1Mapper.findById1(id);
} public GroupIdInfo findById2(Integer id) throws Exception {
return groupIdInfoDb2Mapper.findById2(id);
}
}

8.编写调用Controller

@RestController
public class DubboConfigController { @Autowired
private GroupIdInfoService groupIdInfoService; @RequestMapping("/dubboConfig1/{id}")
GroupIdInfo finddubboConfig1(@PathVariable("id") Integer id) throws Exception{
return groupIdInfoService.findById1(id);
} @RequestMapping("/dubboConfig2/{id}")
GroupIdInfo finddubboConfig2(@PathVariable("id") Integer id) throws Exception{
return groupIdInfoService.findById2(id);
} }

9.启动测试,成功

SpringBoot Mybatis项目中的多数据源支持

SpringBoot Mybatis项目中的多数据源支持

参考

http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html

上一篇:Android 广播 BroadcastReceiver


下一篇:HDU 1222 Wolf and Rabbit(gcd)