背景:业务库mysql变更为postgresql
依赖包:pg驱动包postgresql-42.2.5.jre7.jar,平台使用连接池是druid-1.0.14.jar
安装执行后报错: java.sql.SQLException: validateConnection false
分析:
网上搜了下资料,都说是druid版本低了,换成druid-1.1.0的就可以了,并没有道出缘由,但是另一个项目也跟我们项目组用了同样的依赖包,却可以正常执行,这就很让人疑惑了,作为一名程序猿的倔强,我决定好好探究竟!
于是费了很大劲,在本地复现了错误,最后查看源码,一步步debug,发现了端倪
durid-1.0.14在连接校验时会查询下pg库,SELECT 'x' FROM DUAL,而我们知道pg库其实是没有自带这张dual临时表的,这算是druid-1.0.14版本的一个bug;
高版本druid-1.1.0.jar和druid-1.1.9.jar去除了FROM DUAL,可见高版本是做了优化。
解决方法:
1.不想更换druid-1.0.14.jar包的可以通过建立临时表dual来解决
create table public.dual();
2.替换成高版本的druid包