当前位置: 首页 > 网络应用技术

教您播放许多数据源动态切换!

时间:2023-03-06 22:23:05 网络应用技术

  为了提高应用程序的可靠性,现在许多数据源也很普遍。数据库可以构建双M结构。这首歌兄弟还向您发布了文档,如何使用双M结构构建双M结构?那么,您如何在Java代码中操作大量数据?

  在19年的时间里,我写了几篇文章来教您以配置JDBCTEMPLATE,MYBATIS和JPA中的大多数数据(公共帐户Jiangnan在666的背景下有很少的相关信息),但是这些信息的总体想法的整体思想是文章是mademultiple dao层实例,然后您选择要手动使用的实例,因此不方便。

  Mybatis-Plus还提供相应的工具,感兴趣的朋友可以尝试自己。

  今天,我想带领我的朋友使用AOP的想法来我自己编写一个简单的数据切换工具。

  如果要自定义动态数据源开关,则必须首先了解一个类:

  它是在Spring2.0.1中引入的(请注意,Spring2.0.1不是Spring boot2.0.1,因此这实际上是Spring的非常古老的功能)。该类充当DataSource的路由中介。某些键值被动态切换到真实的数据源。

  粗略的用法是,您预先准备了各种数据源,存储在地图中,地图的关键是此数据源的名称,地图的值是此特定数据源,然后将此地图配置为中间。最后,无论执行数据库查询,都要执行数据库查询,然后取出键并找到执行数据库操作的特定数据源。

  这是一般的想法。

  让我们看一下如何玩。

  首先,我们创建一个春季启动项目,介绍Web,Mybatis和MySQL依赖性。成功创建项目后,然后手动添加DRUID和AOP依赖项,如下所示:

  实际上,关于这一点无话可说,所有这些都是常规的行动。

  接下来,我们创建一个application-druid.yaml来配置我们的数据源信息,如下:

  这是德鲁伊的常规配置,无话可说。唯一需要注意的是我们整个配置文件的格式。DS配置了我们所有的数据源。每个数据源都有一个名称。主是默认数据源的名称。它无法修改。其他数据源可以自定义名称。最后,我们还配置了Druid的监视功能。如果朋友不了解Druid的监视功能,您可以检查Spring Boot如何监视SQL的操作?Essence

  但是,朋友知道YAML配置不像可以通过注释加载自定义配置文件的属性配置,并且YAML配置没有类似的加载机制。我们可以使用Spring Boot的配置文件机制加载此自定义application-druid.yaml配置文件。特定方法是在应用程序中添加配置行。yaml:如下:如下:

  接下来,我们还需要提供配置类,以将此配置文件的内容加载到配置类中,如下:

  关于此配置类别,没有什么可说的。我们配置的多个数据源将在名为DS的地图中读取它。将来,我们将基于此地图中的数据构建数据源。

  接下来,我们必须根据配置文件加载数据源。加载方法如下:

  加载的核心工作是在YamldynamicDataSourceProvider类中完成的。此类中有一个LoadDataSources方法读取所有数据源对象。数据源的相关属性在DruidProperties对象中。我们首先基于基本数据库连接信息创建一个数据源对象,然后调用这些数据源连接池的其他属性(最大连接,最小免费数字等)配置其他属性的方法。最后,在键值的形式中,数据源存储在地图集合中。每个数据源的关键是您在YAML中配置的数据源名称。

  哪个数据源用于当前数据库操作?我们有许多不同的设置。当然,最困难的方法是将当前数据源信息存储到ThreadLocal中。线程局部的特征只是说话。如果更改线程,则无法将其弄清楚,以确保在多线程环境中的数据安全性。

  让我们首先参加一个简单的工具类,如下:

  接下来,我们自定义注释以标记当前数据源,如下:

  将来,该注释将在服务层中添加到服务层。使用此注释时,您需要指定数据源名称。如果未指定,请使用Master用作数据源。

  我们还需要通过AOP分析当前的自定义注释,如下所示:

  接下来,我们源自动态数据源:

  这就是我们在文章开头所说的。该类有一个名为desionecurrentlookupkey的方法。当需要使用数据源时,系统将自动调用该方法以获取当前数据源,例如Master,Master或Slave或其他方法。商标后,您可以相应地获取数据源。

  当我们配置DynamicDataSource时,我们需要配置两个关键参数。一个是settargetDataSources。这是所有当前数据源。告诉所有当前的数据源以摘要datatasource。这些数据源是键值的形式(将来(未来未来,您可以根据definecurrentlookupkey方法返回的键获取特定数据源);另一种方法是setDefaultTargetDataSource。这是默认数据源。当默认数据源。如果没有指定的数据源,我们执行数据库操作(例如,服务层的方法(例如,服务层的方法(例如,服务层的方法)(例如,服务层的方法(例如,服务层的方法(例如,服务层的方法(例如,服务层的方法)(服务层的方法(例如,服务层的方法。不@datasource注释),然后默认使用此数据源。

  最后,将此豆注册到弹簧容器中,如下:

  下面,我们还配置了一个过滤器。该过滤器的目的是在DRUID监视页面上删除Ali的广告。有关具体原则,请参阅Spring Boot的SQL操作?一篇文章。

  好吧,您可以做到,让我们重新测试,写一个usermapper:

  一个非常简单的数据库查询操作。

  这是另一个服务:

  特定操作的数据源由注释指定。如果不使用注释指定,则默认情况下使用主数据源。

  最后,参加单元测试进行测试,如下所示:

  由于我在这里对应于不同的库,因此查询将在此处显示不同的结果。

  知道它知道为什么!

  好吧,公共帐户jiangnan在背景中有一点降雨回复dynamic_datasource,以获取本文的源代码下载链接。

  原始:https://juejin.cn/post/7098116536577032206