介绍业务背景
解决思路
环境准备:
具体实现
这篇文章主要介绍了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 nullSpringBoot + Mybatis如何实现动态数据源切换