ssm配置动态切换数据源

   记录一下ssm项目配置多数据源的方式。

    使用场景:多个单体架构的项目存在依赖或者衍生关系的时候,我们不得不在同一个项目使用多个数据源。

    涉及到的技术:jdk1.8、jdk自定义注解、spring aop、java反射。

    原理:利用spring框架提供的AbstractRoutingDataSource,顾名思义,数据源路由。这里我们把它理解为管理数据源的路由器,他并不管理数据源生存与销毁,他只是数据源传递者。举个核桃:假如mybatis接收到sql execute指令,此时需要sqlsession来连接数据库,众所周知sqlsession需要我们提供数据源由sqlsessionfactory工厂生产(工厂模式就不再介绍了),AbstractRoutingDataSource 就提供了“后门”让开发者可以动态地选择使用哪一个数据源交给 sqlsession工厂。 of cource,如果项目仅需要一条数据源,那就完全没必要去设置了。 

    实现思路:自定义注解@DataSource保存在spring容器中注册的数据源,业务层实现类加上@DataSource注解,利用spring apo切入业务层的所有方法,在切点中过滤加上@DataSource注解的类或方法,并获取到该注解中的数据源名称保存到ThreadLocal 中,通过jdk官方的描述可以知道,每个线程都有独立的变量副本。接下来我们在spring选择数据源的时候把ThreadLocal中保存的数据源取出来即可。

 配置步骤:1,准备多个数据源。

   ssm配置动态切换数据源_第1张图片

        ssm配置动态切换数据源_第2张图片

                 这里准备了两个数据源

 

 2,新建动态数据源类并且继承AbstractRoutingDataSource ,并且注册到spring容器中

     ssm配置动态切换数据源_第3张图片                        ssm配置动态切换数据源_第4张图片

   3,配置apo

  ssm配置动态切换数据源_第5张图片

    ssm配置动态切换数据源_第6张图片

 ssm配置动态切换数据源_第7张图片

      最后测试通过,结果就不贴出来了。

你可能感兴趣的