spring boot下mybatis多数据源配置
话不多说,背景是接了一个新功能,说白了还是对表项的CRUD,只不过略复杂了些。然后新的表项和原来的表项不在一个数据源,ORM框架是mybatis
1.配置文件
pom文件的话不会很复杂,基本上只有单数据源的时候的那些依赖也就够了。
我们要做的是在application.properties里加上多个数据源
#datasource-ktep
spring.datasource.ktep.driver- class -name=com.mysql.jdbc.Driver
spring.datasource.ktep.url= "your
first db url"
spring.datasource.ktep.password= "first
db password"
spring.datasource.ktep.username= "first
db username"
spring.datasource.ktep.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.ktep.hikari.idle-timeout= 1765000
spring.datasource.ktep.hikari.maximum-pool-size= 20
spring.datasource.ktep.hikari.max-lifetime= 100
spring.datasource.ktep.hikari.minimum-idle= 5
#datasource-bsp
spring.datasource.bsp.driver- class -name=com.mysql.jdbc.Driver
spring.datasource.bsp.url= "your
second db url"
spring.datasource.bsp.password= "second
db password"
spring.datasource.bsp.username= "second
db username"
spring.datasource.bsp.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.bsp.hikari.idle-timeout= 1765000
spring.datasource.bsp.hikari.maximum-pool-size= 20
spring.datasource.bsp.hikari.max-lifetime= 100
spring.datasource.bsp.hikari.minimum-idle= 5
|
2.数据源配置
分别对两个数据源进行配置,这里一定要注意的是你必须告诉mybatis哪个是主的数据源,我在这里认为ktep这个数据源是主数据源,所以你看到在每个地方我都给他加了@Primary注解,此外因为这时候你需要通过指定不同的目录以区分使用不同的数据源,我的分组是这样的,以供参考
package com.meituan.flight;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
*
Created by baiwenjun on 2017/8/22.
*
At 下午5:31.
*/
@Configuration
@MapperScan (basePackages
= "com.meituan.flight.dao.ktep" ,sqlSessionFactoryRef
= "ktepSqlSessionFactory" )
public class KtepDataSourceConfig
{
@Bean (name
= "ktepDataSource" )
@ConfigurationProperties (prefix
= "spring.datasource.ktep" )
@Primary
public DataSource
masterDataSource(){
return DataSourceBuilder.create().build();
}
@Bean (name
= "ktepSqlSessionFactory" )
@Primary
public SqlSessionFactory
sqlSessionFactory( @Qualifier ( "ktepDataSource" )
DataSource dataSource) throws Exception
{
SqlSessionFactoryBean
sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver()
.getResources( "classpath*:dao/ktep/*.*" ));
return sessionFactoryBean.getObject();
}
}
|
package com.meituan.flight;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
*
Created by baiwenjun on 2017/8/22.
*
At 下午5:37.
*/
@Configuration
@MapperScan (basePackages
= "com.meituan.flight.dao.bsp" ,sqlSessionFactoryRef
= "bspSqlSessionFactory" )
public class BspDataSourceConfig
{
@Bean (name
= "bspDataSource" )
@ConfigurationProperties (prefix
= "spring.datasource.bsp" )
public DataSource
masterDataSource(){
return DataSourceBuilder.create().build();
}
@Bean (name
= "bspSqlSessionFactory" )
public SqlSessionFactory
sqlSessionFactory( @Qualifier ( "bspDataSource" )
DataSource dataSource) throws Exception
{
SqlSessionFactoryBean
sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver()
.getResources( "classpath*:dao/bsp/*.*" ));
return sessionFactoryBean.getObject();
}
}
|
3.测试
可以直接写test通过代码直接做测试也可以通过web页面上的表现来验证是否成功,这里我采用第二种方式,如图,页面的内容包含了客户的信息,所以只截取了一部分,已经能证明成功就好了。可以看到左侧显示使用bsp的数据源查询成功,右侧使用ktep数据源查询成功
相关推荐
- springMVC +mybatis+mysql多套数据源配置
- spring-boot配置多例,多数据源遇到的坑
- spring boot 多数据源造成 mybatis xml文件报 rg.apache.ibatis.binding.BindingException: Invalid bound statement
- Spring Boot 多环境配置(properties和yaml方法的比较)
- Spring Boot配置mybatis+xml访问数据库代码样例
- spring boot 配置MyBatis,支持多个数据源和分页插件
- Spring Boot(七):Mybatis 多数据源最简解决方案
- 多模块开发过程中Spring Boot +Mybatis找不到Mapper文件,直接运行时异常(坑)
- java Spring Cloud、Spring Boot、Mybatis Plus多租户社交电子商务平台
- SSM(Spring+SpringMVC+MyBatis)框架详细整合和多数据源配置
- R如何与Tableau集成可视化分步指南 - 适用于数据科学和商业智能专业人员
- Silverlight实例教程 - Validation数据验证开篇