使用durid连接池遇到的一个问题

hzwei206 发布于 2014/08/21 11:06
阅读 2K+
收藏 0

做某国企项目(分内网、外网交换网),应用在交换网,数据库在内网,应用不能直接访问内网数据库,只能通过安全隔离网闸访问内网数据库,安全隔离网闸(相当于数据库代理)提供了一个驱动包,类似于oracle的jdbc驱动包,使用proxool没有问题,改用druid出现两个异常:

1.初始化WallFilter时报dbType不支持,在配置里把wall去掉就OK了

2.初始化数据源DruidDataSource时报如下异常:

Caused by: java.lang.UnsupportedOperationException
	at sgcc.nds.jdbc.driver.NdsConnection.getHoldability(NdsConnection.java:972)
	at com.alibaba.druid.filter.FilterChainImpl.connection_getHoldability(FilterChainImpl.java:325)
	at com.alibaba.druid.filter.FilterAdapter.connection_getHoldability(FilterAdapter.java:862)
	at com.alibaba.druid.filter.FilterChainImpl.connection_getHoldability(FilterChainImpl.java:322)
	at com.alibaba.druid.filter.FilterAdapter.connection_getHoldability(FilterAdapter.java:862)
	at com.alibaba.druid.filter.FilterChainImpl.connection_getHoldability(FilterChainImpl.java:322)
	at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.getHoldability(ConnectionProxyImpl.java:244)
	at com.alibaba.druid.pool.DruidConnectionHolder.<init>(DruidConnectionHolder.java:83)
	at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:605)

看异常信息发现是网闸的驱动包的Connection代理类NdsConnection未实现Connection.getHoldability()方法。反编译的NdsConnection里的getHoldability()代码为

public int getHoldability() throws SQLException {
    log(this + ".getHoldability()-->Unsupported");
    throw new UnsupportedOperationException();
}

现在不可能让安全隔离网闸方修改他们的驱动包(国企的人都很牛逼很高傲,我们只能适应他们)。

这种情况下,是不是得放弃druid连接池,只能用proxool连接池了?或者有没有什么规避方法让druid连接池初始化时绕过getHoldability()的调用?

加载中
0
wenshao
wenshao
谢谢你的支持,问题刚修复。如果你着急,可以自行编译测试。我这边会尽快发布新版本。
孤单时会想你
孤单时会想你
druid 和fastjson要找最新版 到底是github 还是 git.oschina.net or 阿里巴巴?
0
南湖船老大
南湖船老大

引用来自“wenshao”的评论

谢谢你的支持,问题刚修复。如果你着急,可以自行编译测试。我这边会尽快发布新版本。
温少效率好高
0
h
hzwei206

引用来自“wenshao”的评论

谢谢你的支持,问题刚修复。如果你着急,可以自行编译测试。我这边会尽快发布新版本。
谢谢@wenshao ,我等新版本
0
mir2ming
mir2ming

为什么我用1.10版本的druid 还是存在这个问题,请问哪个版本的可以用NDSDriver,谢谢

返回顶部
顶部