谷歌seo最好的公司,seo营销名词解释,网站打开慢如何优化,自己创建网站赚钱背景介绍
现项目使用了两个数据源#xff0c;分别为A、B#xff0c;两个数据库的数据结构并不相同#xff0c;数据库A是用来做查询一些基本信息的#xff0c;数据库B是用来保留业务操作数据的。后端是在mapper层用DS注解来区分哪些地方用数据库A#xff0c;而哪些地方用数…背景介绍
现项目使用了两个数据源分别为A、B两个数据库的数据结构并不相同数据库A是用来做查询一些基本信息的数据库B是用来保留业务操作数据的。后端是在mapper层用DS注解来区分哪些地方用数据库A而哪些地方用数据库B的。
现在有个新需求业务新增一个功能用户可以在界面选择控制模式有两个选项分别是作战模式和训练模式而业务需要展示对应模式的数据也就是说需要新增一个数据库C用来保留训练模式下的数据原本的数据库B用来保留作战模式下的数据但是不管在哪种模式下数据库A是不需要切换的。
思路
在这个需求之前原本是用DS注解来做数据源的切换然后我就想是否可以使用AOP来实现这个功能写一个切面以DS注解作为切入点在mybatis执行SQL前判断执行方法所属的对象上面是否有DS(B)注解如果有的话则使用反射修改注解的值为DS(C)。想着应该是可以的最后几经波折代码也写出来了结果却是出乎意外完全没有效果。
最终解决
上面使用AOP最后并没有实现想要的功能如果有大佬知道如何用AOP解决此需求还望赐教。
我后面是使用mybatis拦截器解决的在mybatis执行方法时获取方法全路径并获取SQL语句然后判断方法全路径是否属于数据源B所属的包数据源A和B的mapper层在不同的包下面是的话则在SQL语句要执行的表前面加上数据库C的名字如select * from table 修改为 select * from C.table。
亲测有效。但始终看着有点别扭我想肯定还有其它方法待我好好研究一翻再来更新吧。