最近接手了一个Spring Cloud + Mybatis架构的项目,本身用的是sqlserver的数据库,因为业务需要,需要连接另一个项目的mysql数据库,于是就想到了多数据源配置,费了些时间,终于弄好了,现把流程和注意事项mark一下。

1.首先是Application要加上exclude = {DataSourceAutoConfiguration.class},禁用数据库自动配置。

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableTransactionManagement
public class PromoApiApplication {public static void main(String[] args) {SpringApplication.run(PromoApiApplication.class, args);}
}

2.接下来是第一个数据源配置文件

@Configuration
@MapperScan(basePackages = {"com.xxxxx.xxxx.api.mapper.hos"},sqlSessionFactoryRef = "sqlSessionFactoryHosDataSource")
public class MybatisHosConfig {/*** 自动读取DataSource配置文件* @return*/@Primary@Bean(name = "hosProperties")public DataSourceProperties hosProperties() {return new DataSourceProperties();}/*** 添加@Primary注解,设置默认数据源,事务管理器* @return*/@Primary@Bean(name = "hosDataSource")@ConfigurationProperties("spring.datasource.hos")public DataSource hosDataSource(@Qualifier("hosProperties") DataSourceProperties properties) {DataSource dataSource = properties.initializeDataSourceBuilder().type(DruidDataSource.class).build();return dataSource;}@Primary@Bean(name = "sqlSessionFactoryHosDataSource")public SqlSessionFactory sqlSessionFactoryHosDataSource(@Qualifier("hosDataSource")DataSource hosDataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();configuration.setMapUnderscoreToCamelCase(true);factoryBean.setConfiguration(configuration);// 使用hosDataSource数据源, 连接hosDataSource库factoryBean.setDataSource(hosDataSource);//下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加//指定entity和mapper。xml的路径factoryBean.setTypeAliasesPackage("com.xxxx.xxxx.api.entity.hos");factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/hos/*Mapper.xml"));return factoryBean.getObject();}@Primary@Beanpublic SqlSessionTemplate sqlSessionTemplateHosDataSource(@Qualifier("sqlSessionFactoryHosDataSource") SqlSessionFactory sqlSessionTemplateHosDataSource) throws Exception {//使用注解中配置的FactorySqlSessionTemplate template = new SqlSessionTemplate(sqlSessionTemplateHosDataSource);return template;}@Primary@Beanpublic PlatformTransactionManager hosTransactionManager(@Qualifier("hosDataSource") DataSource prodDataSource) {return new DataSourceTransactionManager(prodDataSource);}
}

3.第二个数据源

@Configuration
@MapperScan(basePackages = {"com.xxxx.xxx.api.mapper.market"},sqlSessionFactoryRef = "sqlSessionFactoryMarketDataSource")
public class MybatisMarketConfig {/*** 自动读取DataSource配置文件* @return*/@Bean(name = "marketProperties")@ConfigurationProperties("spring.datasource.market")public DataSourceProperties hosProperties() {return new DataSourceProperties();}@Bean(name = "marketDataSource")public DataSource marketDataSource(@Qualifier("marketProperties") DataSourceProperties properties) {DataSource dataSource = properties.initializeDataSourceBuilder().type(DruidDataSource.class).build();return dataSource;}@Bean(name = "sqlSessionFactoryMarketDataSource")public SqlSessionFactory sqlSessionFactoryMarketDataSource(@Qualifier("marketDataSource")DataSource marketDataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();configuration.setMapUnderscoreToCamelCase(true);factoryBean.setConfiguration(configuration);// 使用marketDataSource数据源, 连接marketDataSource库factoryBean.setDataSource(marketDataSource);//下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加factoryBean.setTypeAliasesPackage("com.xxx.xxxx.api.entity.market");factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/market/*Mapper.xml"));return factoryBean.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplateMarketDataSource(@Qualifier("sqlSessionFactoryMarketDataSource") SqlSessionFactory sqlSessionFactoryMarketDataSource) throws Exception {SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryMarketDataSource);return template;}@Beanpublic PlatformTransactionManager marketTransactionManager(@Qualifier("marketDataSource") DataSource sitDataSource) {return new DataSourceTransactionManager(sitDataSource);}
}

4.yml配置文件如下:

项目结构图如下:

其中要注意mybatis的entity,mapper,mapper.xml的路径,两个数据源要分开,在datasourcesconfig中路径都要手动声明且路径书写正确。

因为在声明datasource的时候加了@primary注解,所以事务管理的时候会默认使用这个TransactionManager去管理事务。

在要使用第二个事务管理的service上要加@Transactional(value = "marketTransactionManager")去管理事务。这就是使用方法。

好了,大家有兴趣的就去试试吧。

Spring Cloud + Mybatis 多数据源配置相关推荐

  1. java+++多数据源配置,Spring Cloud + Mybatis 多数据源配置

    项目开发中遇到缺陷,使用多数据源能避免分库间数据同步的步骤,在此记录配置步骤. 一.数据源自动配置禁用 1.将spring boot自带的DataSourceAutoConfiguration禁掉,防 ...

  2. 【Spring Cloud】多数据源配置

    引言 从8月份到现在,团队一直有一项资源整合迁移的任务.简单来说,原来的产品设计规划不合理,各业务组各做各的,导致各类核心数据分散于各个业务组.8月初资源整合方案落地并开始实施,我们组承担起了管控各类 ...

  3. Spring集成Mybatis多数据源配置

    既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧. Spring集成Mybatis在之前就已经提到了.Spring集成Mybatis 集成Mybatis多数据源有两种方式: 1.创建 ...

  4. Spring MVC+Mybatis 多数据源配置

    文章来自:https://www.jianshu.com/p/fddcc1a6b2d8 1. 继承AbstractRoutingDataSource AbstractRoutingDataSource ...

  5. spring mybatis 多数据源配置 jeesite 多数据源配置

    spring mybatis 多数据源配置 jeesite 多数据源配置 一.情景描述 在系统数据达到一定的访问量时,遇到单个数据库瓶颈,所以需要扩展数据库,启用第二个数据源资源,项目架构变成 一个服 ...

  6. MyBatis多数据源配置(读写分离)

    MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 ...

  7. Spring Cloud: .yml属性文件配置 (完善中)

    服务消费端 server:port: 8080 spring:application:name: orderservice # spring cloud 服务名称# 数据源datasource:dri ...

  8. Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置

    文章目录 概述 特别注意版本信息 使用@RefreshScope + /actuator/bus-refresh端点手动刷新配置 Step1. 添加依赖 Step2. 配置RabbitMQ信息 Ste ...

  9. spring cloud gateway的stripPrefix配置

    序 本文主要研究下spring cloud gateway的stripPrefix配置 使用zuul的配置 zuul:routes:demo:sensitiveHeaders: Access-Cont ...

最新文章

  1. 【jquery】用jsp写jquery的模板
  2. 蓝桥杯Java输入输出相关
  3. 发展农业对话国际农民丰收节贸易会 菲律宾学中国还是印度?
  4. html标签转换日期格式,input标签的type为date,显示的日期格式样式更改
  5. 常对象和常函数的关系 const
  6. linux测试dvi接口,TeX Live DVI字体数据解析整数溢出漏洞
  7. Python 基础总结
  8. spring实战(第四版)读书笔记 附电子书网盘链接
  9. 如何实现必须关注公众号才能使用微信小程序,从而通过微信小程序免费为公众号吸粉。#微信营销#微信公众号吸粉#微信小程序吸粉
  10. 史上首次,45岁边缘计算大牛蒋濛当选普渡大学校长!
  11. 模拟客服自动回复代码
  12. 如何检查DirectX的版本(用于Windows Phone Developer Tools的安装检查)
  13. Android Things 开发入门
  14. 百度网盘准备好,测绘相关资料
  15. Words Accumulation
  16. nginx server name “*“ has suspicious symbols
  17. Hackbar初步了解和火狐中安装
  18. Windows API 函数大全
  19. 如何优化selenium webdriver的执行速度
  20. mysql数据库主键重复

热门文章

  1. 问题 G: 学号识别
  2. bottom sheets_Excel 2013中的SHEET和SHEETS函数
  3. centos7配置(nvidia+cuda+cudnn+anaconda+tensorflow)gpu开发环境
  4. 进口红酒清关流程|外贸行业 进口红酒清关流程
  5. 每日一皮:朋友圈集赞原来还可以这样...
  6. Go Cloud项目开源发布:Go语言将成为云端应用开发的首选语言?
  7. 【C++】「一本通 1.1 例 4」加工生产调度
  8. 联想台式电脑重装系统按哪个键?
  9. vue进入页面执行的钩子函数_vue中各选项及钩子函数执行顺序详解
  10. 接触C#的第一天和回锅Python的第一天