这篇文章已包含在我的GitHub选择中,欢迎使用Star:https://github.com/yehongzhi/learningsummary
在正常开发中,一个项目通常会遇到多个数据源。例如,数据源A中的某些数据,数据源B中的数据的另一部分,业务需要从接口中合并这两个部分。
还是操作数据源A后,您需要切换数据源并操作数据源B.如何达到此类需求?
实际上,Mybatis-Plus有相关的实现。它是基于Springboot的启动子快速整合了数据次数。
首先,没有证明Springboot+Mybatis+Mybatis-Plus的项目。它将不会被证明,这是相对简单的。首先介绍了如何使用数据源的方法。
第二步是修改应用程序配置文件并配置数据源。
第三步是用@ds Annotation.ther.generally我想贴上映射器接口。注释的值是数据源的名称。
如图所示,现在有两个数据源:
与从属数据源的用户表相对应的映射器接口,如下:
与主数据源的商品表相对应的映射器接口,如下:
然后,我们编写一项用于测试的服务:
控制器接口,如下:
启动项目,然后请求接口地址。我们可以看到结果包含两个数据源中发现的数据查询:
查看源代码,您可以知道它是在类和方法中使用的。
服务或映射器上的滞后。优先级在类上方的方法上标记。
什么是设置和切换数据源,首先查看一个示例:
启动项目,然后请求地址以发现仍然可以找到结果,这证明它支持本机切换数据源。
让我们看一个示例:首先,定义一个插入对象insertrequest:
然后将@transactional注释添加到服务类中,然后将数据插入两个数据源的表中::
然后将输入方法添加到控制器接口层:
启动项目,测试,结果是500个错误:
如果我们查看控制台日志,我们会发现问题:
我了解到, @Transactional是本地交易管理,而不是分布式交易,因此我们无法在切换数据源的方式中添加@transactional注释。
在不使用分布式交易的情况下,我们只能让他们管理自己的事务,在中间添加一层服务。
更改后,让我们再次测试,我们可以看到数据源切换成功。
如果您需要使用分布式交易,则官方网站还表明,提供基于SEATA的分布式交易解决方案,此处将不会证明。读者有兴趣尝试自己。
我们仍然在事实中讲话,首先是整个示例:
启动项目,测试并找到一个错误:
原因是数据源切换的基本原理由AOP实现。如果调用了内部方法,则不会使用AOP,因此无法切换数据源。
解决方案是将GetCommodityList()方法提及另一类。
动态数据实际上具有很多功能,而无需引入。我不会一个人介绍他们。如果您有兴趣,您可以从官方网站上学习。大多数数据在项目开发中非常普遍,因此我认为学习此插件仍然很有用。如果您以后有时间,我将把动态datasource源代码解释为探索底层的实现原理。
非常感谢您的阅读。我希望这篇文章可以帮助您。
功能有限,如果有任何错误或不当的事情,请批评并纠正它们!