SpringBoot + Mybatis如何实现动态数据源切换

  介绍

这篇文章主要介绍了SpringBoot + Mybatis如何实现动态数据源切换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

SpringBoot是什么

SpringBoot一种全新的编程规范,其设计目的是用来简化新弹簧应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

业务背景

电商订单项目分正向和逆向两个部分:其中正向数据库记录了订单的基本信息,包括订单基本信息,订单商品信息,优惠卷信息,发票信息,账期信息,结算信息,订单备注信息,收货人信息等;逆向数据库主要包含了商品的退货信息和维修信息。数据量超过500年万行就要考虑分库分表和读写分离,那么我们在正向操作和逆向操作的时候,就需要动态的切换到相应的数据库,进行相关的操作。

解决思路

现在项目的结构设计基本上是基于MVC的,那么数据库的操作集中在dao层完成,主要业务逻辑在服务层处理,控制器层处理请求。假设在执行dao层代码之前能够将数据源(数据源)换成我们想要执行操作的数据源,那么这个问题就解决了

环境准备:

1。实体类

@ data   public  class  Product  {,,,   ,,,private  Integer  id;,,,,   ,,,private  String 名字,,,,,   ,,,private  Double 价格;   }

2。ProductMapper

public  interface  ProductMapper  {,   ,,,@Select (“select  *,得到product"),   ,,,public  List, findAllProductM (),,   ,,,@Select (“select  *,得到product"),   ,,,public  List, findAllProductS (),,   }

3。ProductService

@Service    {public  class  ProductService    ,,,@Autowired    ,,,private  ProductMapper  productMapper;,   ,,,public  void  findAllProductM () {,   ,,,,,,,//,查询Master    ,,,,,,,List, allProductM =, productMapper.findAllProductM (),,   ,,,,,,,System.out.println (allProductM);,   ,,,}   ,,,public  void  findAllProductS () {,   ,,,,,,,//,查询Slave    ,,,,,,,List, allProductS =, productMapper.findAllProductS (),,   ,,,,,,,System.out.println (allProductS);,   ,,,},   }

具体实现

第一步:配置多数据源

首先,我们在应用程序。属性中配置两个数据源

spring.druid.datasource.master.password=root    spring.druid.datasource.master.username=root    spring.druid.datasource.master.jdbc安康;url=jdbc: mysql://localhost: 3306/product_master ?, useUnicode=true& characterEncoding=utf-8& useSSL=true& serverTimezone=UTC    spring.druid.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver       spring.druid.datasource.slave.password=root    spring.druid.datasource.slave.username=root    spring.druid.datasource.slave.jdbc安康;url=jdbc: mysql://localhost: 3306/product_slave ?, useUnicode=true& characterEncoding=utf-8& useSSL=true& serverTimezone=UTC    spring.druid.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver   在SpringBoot的配置代码中,我们初始化两个数据源:      @Configuration    {public  class  MyDataSourceConfiguratioin    ,,,Logger  Logger =, LoggerFactory.getLogger (MyDataSourceConfiguratioin.class);,   ,,,/* * *,Master  data 源只*/,   ,,,@ bean (“masterDataSource"),   ,,,@ConfigurationProperties (=prefix “spring.druid.datasource.master"),   ,,,DataSource  masterDataSource (), {,   ,,,,,,,logger.info (“create  master 数据源…“),,   ,,,,,,,return  DataSourceBuilder.create () .build (),,   ,,,}      ,,,/* * *,Slave  data 源只*/,   ,,,@ bean (“slaveDataSource"),   ,,,@ConfigurationProperties (=prefix “spring.druid.datasource.slave"),   ,,,DataSource  slaveDataSource (), {,   ,,,,,,,logger.info (“create  slave 数据源…“),,   ,,,,,,,return  DataSourceBuilder.create () .build (),,   ,,,},      ,,@ bean   ,,@Primary   ,,,DataSource  primaryDataSource (@Autowired  @ qualifier (“masterDataSource") DataSource  masterDataSource,      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

SpringBoot + Mybatis如何实现动态数据源切换