记录一次成功的数据源热切换

1. 需求场景

      因业务线越做越大,需要将数据库进行拆分隔离。因此梳理已有的十余个服务,需要进行两种方式的拆分。一种是整个服务的数据源全量迁移,一种是服务中库表需部分迁移,需做双数据源。

      接着分析发现需做双数据源的服务属于基础服务,更新不会很频繁,因此做静态上线——即配置双数据源。dba做表全量迁移,之后服务发布上线。需要数据源全量迁移的服务属于实时要求高的服务,访问量高,不可停机维护。因此采用热切换。

2. 前期准备

     1. 代码部分: 使用Spring提供的AbstractRoutingDataSource类,进行对当前数据源的监听。另外新写切面判断apollo开关是否开启,如开启则使用新数据源。

     需要注意,部分注解会使AbstractRoutingDataSource的动态数据源监听失效,如@Transaction注解。因为事务注解的执行顺序优先于自己建的切换数据源的切面,此时需要配置order顺序保证数据源切换优先执行。

     2. dba准备:    在切换的前五分钟做好从老库到新库的双写,保证新库数据的同步性。在切换后做老库和新库流量的监控。

3. no bb, show me code

git地址: https://github.com/bkxpao/datasource-switch

目前线上已成功热切换, 求star :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值