转载 SpringBoot+mybatis配置双数据源(mysql+oracle)并且实现动态切换

原文出处:https://blog.csdn.net/twomr/article/details/79137056

     记录一下我在开发此功能中踩过的坑,供各位同仁借鉴。

        (1)按照原文万事具备后开始进行测试联调,发现在使用Oracle数据源的时候总是会报invalid oracle validationQuery. select 1,may should be select 1 from  dual. 这个错误很容易理解 sql语法错误。为什么会出现这个呢?这个定位倒是很简单,因为我的项目中配置文件里加入了

转载 SpringBoot+mybatis配置双数据源(mysql+oracle)并且实现动态切换_第1张图片这个配置 。因为项目最开始是用的mysql数据库,这样并没什么问题,但是加上Oracle数据源就不行了。罪魁祸首就是 validation-query: select 1 这是mysql数据库写法 如果是Oracle则应该写为:select 1 from dual.我的第一反应就是先去掉这句,然后调用Oracle数据源接口依然报错。开始我一直在纠结是不是Oracle架包版本问题(这个搞了好久),测试后发现并不是。配置文件相关配置并不多,然后我又删除了test-on-borrow: true这个配置,还是不行。最后我把test-on-borrow: true中的true设为false,突然就柳暗花明又一村,调通了!!!!

       那么这个test-on-borrow到底是个什么意思呢,它是干嘛的呢?由于项目中用到了阿里巴巴的druid连接池,事先预置一定数量的数据库连接,调用时直接去连接池中取出空闲的连接,以免在调用时临时创建消耗性能,那么test-on-borrow这句话的意思就是在获取连接的时候是否去检测这个连接是否正常工作,设为false表示不检测,那自然也就不会报之前的sql错误的问题了。那为啥我删掉test-on-borrow:true不行呢,我想大概是Druid连接池默认test-on-borrow是设置为true的缘故吧

     (2)在需要切换数据源的serviceImpl(有@Service注解)里如果加入了事务(我项目中用注解@Transactional),则无法实现数据源切换,所以我后面在需要的地方去掉了事务,就可以解决了。具体原因不清楚。

   以上是我在项目中遇到的坑,希望对大家有所借鉴。如有不正之处,欢迎指出,大家共同学习进步!大家如果有啥问题,可以加我qq:1170929167.

你可能感兴趣的:(转载 SpringBoot+mybatis配置双数据源(mysql+oracle)并且实现动态切换)