背景:
用Druid做Oracle的连接池感觉还不错,近日新项目要用Hive,故而也想使用Duid来做Hive的连接池。试了试果真可以,也没报错。但是,过了一段时间,同样的代码却出问题了。离奇的是我同事,却没有任何问题,依旧可以使用。
PS:最新版本已发布1.0.26,该问题直接下载新版本即可。但是,出现新的问题,maven引入包时,jconsole-1.8.jar、tools-1.8.0.jar缺失。
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> <exclusions> <exclusion> <groupId>com.alibaba</groupId> <artifactId>jconsole</artifactId> </exclusion> <exclusion> <groupId>com.alibaba</groupId> <artifactId>tools</artifactId> </exclusion> </exclusions> </dependency>
报错:
getHoldability unsupported
解决方案:
github上有强人问了这个问题,顺着问题找到了解决办法。但是因为还没发布,故而需要自己编译打包。
提问链接: https://github.com/alibaba/druid/issues/1386
温少答复链接:https://github.com/alibaba/druid/commit/e0837d7c24e2450d0d8628360a7b09c79ed2491e
修改后的代码如下:
src/main/java/com/alibaba/druid/pool/DruidConnectionHolder.java public DruidConnectionHolder(DruidAbstractDataSource dataSource, Connection conn boolean initUnderlyHoldability = !holdabilityUnsupported; if (JdbcConstants.SYBASE.equals(dataSource.getDbType()) // || JdbcConstants.DB2.equals(dataSource.getDbType()) // || JdbcConstants.HIVE.equals(dataSource.getDbType()) // ) { initUnderlyHoldability = false; }