SpringBoot+Mybatis如何实现动态数据源切换(mybatis,springboot,开发技术)

时间:2024-05-07 08:32:26 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    SpringBoot%2BMybatis%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%8A%A8%E6%80%81%E6%95%B0%E6%8D%AE%E6%BA%90%E5%88%87%E6%8D%A2

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

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

1.实体类

2.ProductMapper

3.ProductService

第一步:配置多数据源

首先,我们在application.properties中配置两个数据源

第二步:编写RoutingDataSource
然后,我们用Spring内置的RoutingDataSource,把两个真实的数据源代理为一个动态数据源:

第三步:编写RoutingDataSourceContext
用于存储当前需要切换为哪个数据源

测试(一下代码为controller中代码)

以上代码即可实现数据源动态切换

以上代码是可行的,但是,需要读数据库的地方,就需要加上一大段RoutingDataSourceContext

ctx = ...代码,使用起来十分不便。以下是优化方案

我们可以申明一个自定义注解,将以上RoutingDataSourceContext中的值,放在注解的value属性中,

然后定义一个切面类,当我们在方法上标注自定义注解的时候,执行切面逻辑,获取到注解中的值,set到RoutingDataSourceContext中,从而实现通过注解的方式,来动态切换数据源

以下是代码实现:

注解类

切面类:

改造Controller方法

本文:SpringBoot+Mybatis如何实现动态数据源切换的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:R语言lubridate包处理时间数据的示例分析下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18