读写分离(数据源动态切换)

简介: 数据源在spring加载启动完成之后,需要根据不同的业务场景做动态的切换。 解决思路 1、借助spring提供的抽象类AbstractRoutingDataSource,通过继承抽象类,并覆盖determineCurrentLookupKey方法。 2、增加Aspect环绕服务,在before里面设置好数据源本地线程变量、after之后清理掉数据源本地线程变量。 3、每次获

数据源在spring加载启动完成之后,需要根据不同的业务场景做动态的切换。

解决思路

1、借助spring提供的抽象类AbstractRoutingDataSource,通过继承抽象类,并覆盖determineCurrentLookupKey方法。

2、增加Aspect环绕服务,在before里面设置好数据源本地线程变量、after之后清理掉数据源本地线程变量。

3、每次获取的时候,若数据源本地线程变量为空,则默认走主dataSource。

注意事项

1、Aspect和继承的AbstractRoutingDataSource类之间执行顺序的问题通过设置order来控制。

2、测试动态数据源切换通过启动系统来测试,不是单元测试,单元测试有的时候会失效。

目录
相关文章
|
6月前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之多主集群配置多个全局只读节点最多可增加到多少个
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
6月前
|
存储 Oracle 关系型数据库
几种常见的数据同步方式
【6月更文挑战第18天】几种常见的数据同步方式
730 4
|
6月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品在使用的过程中如何设置优先级数据库节点
在PolarDB中设置优先级节点涉及登录管理控制台,创建新节点并选择“设置优先级”选项。优先级高的节点不等同于性能更好,而是系统优先处理请求的目标。配置时需依据实际需求。[链接](https://www.caigumoke.com/cj/e1a7fff4.html)[链接](https://www.caigumoke.com/yh/b3b74248.html)
|
7月前
|
Java 关系型数据库 MySQL
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
|
Java 数据库
SSM 最简单的实现操作 多数据源&动态切换
SSM 最简单的实现操作 多数据源&动态切换
282 0
SSM 最简单的实现操作 多数据源&动态切换
|
存储 缓存 druid
基于springboot+jpa 实现多租户动态切换多数据源 - 基于dynamic-datasource实现多租户动态切换数据源
基于springboot+jpa 实现多租户动态切换多数据源 - 基于dynamic-datasource实现多租户动态切换数据源
3299 0
基于springboot+jpa 实现多租户动态切换多数据源 - 基于dynamic-datasource实现多租户动态切换数据源
|
存储 前端开发 Java
可路由计算引擎实现前置数据库
可路由计算引擎实现前置数据库
可路由计算引擎实现前置数据库
|
SQL 存储 关系型数据库
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
快速学习PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
|
Java 中间件 网络安全
数据库主从分离加读写分离操作步骤
数据库主从分离加读写分离操作步骤
151 0
|
缓存 NoSQL Java
SSM(八)动态切换数据源(下)
在现在开发的过程中应该大多数朋友都有遇到过切换数据源的需求。比如现在常用的数据库读写分离,或者就是有两个数据库的情况,这些都需要用到切换数据源。