方法一
- 配置多个数据库
1 | yml复制代码spring: |
- 配置数据库连接
1 | java复制代码package com.my.equipment.config.oldConfig; |
1 | java复制代码package com.my.equipment.config.oldConfig; |
方法2
1.配置多个数据库
1 | yml复制代码spring: |
2.配置数据库连接
定义多元数据库
1 | java复制代码package com.my.equipment.utils; |
定义数据源切换
1 | csharp复制代码package com.my.equipment.utils; |
重写路由选择类
1 | scala复制代码package com.my.equipment.utils; |
配置Mybatis SqlSessionFactory 和事务管理器
1 | kotlin复制代码package com.my.equipment.config; |
配置数据源
1 | kotlin复制代码package com.my.equipment.config; |
切面实现数据源切换
1 | java复制代码package com.my.equipment.aspect; |
注意:事务问题,可以发现一但添加了@Transactional,那么它的数据源只会去使用默认的数据源。(由于 AbstractRoutingDataSource中有个机制,如果当前上下文的连接对象为空,获取一个连接对象,然后保存起来,下次doBegin再调用时,就直接用这个连接了,根本不做任何切换(类似于缓存命中!),这就导致切换失败,也许有人会想到提高注入优先级,但是本文的切面是基于Dao的,那么会导致无论你怎么调整优先级,务必是@Transctional优先注入,那么要解决该问题个人目前的思路是:在Controller优先切换数据源,在services中使用@Transactional该方法)
1 | less复制代码@ApiOperation(value = "结束录制") |
1 | less复制代码@Override |
但是该方法仍然属于非分布式数据库事务层面,无法做到在一个方法中回滚两个不同的数据源。
本文转载自: 掘金