DAMO开发者矩阵
spring boot下mybatis多数据源配置
spring boot下mybatis多数据源配置
话不多说,背景是接了一个新功能,说白了还是对表项的CRUD,只不过略复杂了些。然后新的表项和原来的表项不在一个数据源,ORM框架是mybatis
1.配置文件
pom文件的话不会很复杂,基本上只有单数据源的时候的那些依赖也就够了。
我们要做的是在application.properties里加上多个数据源
#datasource-ktepspring.datasource.ktep.driver-class-name=com.mysql.jdbc.Driverspring.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.HikariDataSourcespring.datasource.ktep.hikari.idle-timeout=1765000spring.datasource.ktep.hikari.maximum-pool-size=20spring.datasource.ktep.hikari.max-lifetime=100spring.datasource.ktep.hikari.minimum-idle=5#datasource-bspspring.datasource.bsp.driver-class-name=com.mysql.jdbc.Driverspring.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.HikariDataSourcespring.datasource.bsp.hikari.idle-timeout=1765000spring.datasource.bsp.hikari.maximum-pool-size=20spring.datasource.bsp.hikari.max-lifetime=100spring.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数据源查询成功
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
- · C++ 补充说明:ROS2 Subscriber 为什么常用智能指针接收消息?
- · Work Agent深度解读:AI如何自主完成多步骤长程任务
- · AgriOS 农芯 · 作物操作系统:农业数字化的全场景解决方案
1907
0
0
- 0
扫一扫分享内容
分享
回到
顶部
顶部

所有评论(0)