动态数据源相关问题

配置动态数据源网上的例子一大把,但是按照上面的配置会遇到的一些问题和原来却没有描述,需要注意的几个点如下:

1.动态数据源根据方法切换数据源需要配置切面拦截器,注意该拦截器 一定要设置优先级为1,否则会导致获取数据源的时候拦截器还没有执行,因为数据源的获取也是拦截器执行的,设置方法 注解是@Order(1)。

2.必须要弄清楚 session 会话和事务的关系,一个session 会话中会存在多个事物,session 开启会话的时候会获取数据源,那么问题来了,就是你的两个service方法,分别保存到两个不同的数据库会有问题,因为这两个事物很可能会根据 会话的开启配置 而共享同一个会话,而不会重新去获取新的数据源,导致切换无效,所以 会话开启要和数据源事物配置保持一致。

3. jta hibernate 中 使用切换动态数据源的方式 两次save方法保存进两个数据源,其中一个会失效,原因是因为第一次保存以后,session 缓存中会存在该对象,第二次使用save保存就会失效,所以需要先 剔除 使用 detach 方法 使该对象变成游离状态,并且 使用detach 方法的时候,也会因为数据库中id 和 该对象id 一致,导致无法剔除而报错,所以需要将id 设置为 null,然后 再使用 detach 方法剔除成游离状态,再保存,就可以保存进两个数据库了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值