Spring不能动态切数据源, 因为determineCurrentLookupKey()在aop拦截之前执行,怎么解决?

qinjamesko 发布于 2017/02/12 17:16
阅读 2K+
收藏 1

Spring不能动态切数据源, 因为determineCurrentLookupKey()在aop拦截之前执行?

在aop拦截器执行完后,不在执行determineCurrentLookupKey()方法

加载中
1
JuST4iT
JuST4iT
业务层方法不开事务 可以动态切换 开启事务后切换失效了
0
阿木沐

引用来自“JuST4iT”的评论

业务层方法不开事务 可以动态切换 开启事务后切换失效了

开启事务有什么方法可以切换吗?

0
键盘上的贝多芬
键盘上的贝多芬

请问解决了吗?

0
W
Wolf_Heart

自定义拦截器,拦截业务层的所有方法,然后根据方法名(get、query、find、select走主库)(save、add、update、modify、delete走从库)判断走主库还是从库。然后设置数据源类型,数据源类型存放在ThreadLocal中,这样在继承

AbstractRoutingDataSource中重写
determineCurrentLookupKey()方法中通过ThreadLocal中获取
DataSourceHolder.getDataSourceType();
键盘上的贝多芬
键盘上的贝多芬
已经这样做了。AOP拦截到方法设置从库,但是DAO层的查询还是用的主库。困扰了两天了。
返回顶部
顶部