多数据源动态切换

500 阅读3分钟

在公司开发的过程中,用到主从库的切换,于是就想自己动手实现一个可以实现多库之间的随意切 换。于是该项目就产生了!该项目基于spring2.0.1才添加的的AbstractRutingDataSource类,同时利 用AspectJ项目实现aop, 从而实现数据源的动态切换。

该项目由最初的的demo项目mydemo/AspectJDemo孵化而来。

功能目标

该项目基本上确定了所拥有的功能:

  • 1.通过注解项目中自定义的@ChangeTo注解来实现,将该注解放到service层的方法的前即可,该注解 拥有默认的数据源

  • 2.还可以手动切换,利用DynamicDataSource.changeTo()方法来实现。手动切换只能用在一种情况下, 那就是事务必须在数据持久层进行管理,在@Transaction下失效。

  • 3.可以通过注解@DataSourceDistribute注解,对service层的实现类进行类级别的注解,然后可通过正 则表达式来实现针对不同的方法使用指定的注解。

支持数据源分组和简单的负载均衡(轮询)

1.负载均衡。在配置了多主多从的数据源的情况下,利用@DataSourceGroup把service层的方法与数据 源组进行对应,当方法执行时,自动从数据源组中轮训数据源进行切换,从而达到均衡负载的目的。

后期添加功能:

1.监控模块和过滤功能。后期会添加对你添加的每个注解进行流量监控,可以查看每个注解的流量大小,还可以 进行限流,当某个注解的并发访问量查过你设置的最大的值时,会放弃请求。你自己也可以对过滤某块进行扩展, 将你实现的过滤类进行设置,注入到aspect中,在每个注解运行前后都会执行。

系统链接:github.com/zeq9069/koa…

mysql脚本语句包含了本项目中的主从两个数据库中涉及的表的创建脚本语句,其中slave表中的url的值应该如下:

jdbc:mysql://localhost:3306/slave?useUnicode=true&autoReconnect=true&useSSL=false&characterEncoding=utf-8&useSSL=true

利用AOP+注解实现多数据源的动态切换

其中为了避免同一个事物下数据源切换失效,在动态数据源注册的时候,同时为不同的数据源创建自己的事务,demo片段如下

github.com/kobeyk/spri…

数据库长连接和短连接

www.cnblogs.com/endige/arch…

通过实现该方法在不同数据源之间切换

www.cnblogs.com/0591jb/p/13…

  • SpringBoot + Mybatis 多数据源配置 —— 根据用户自动切换

blog.csdn.net/qq_36903131…