druid加载MySQL驱动原理_druid多数据源加载driverclass问题

本文探讨了Druid数据源在加载MySQL驱动时的工作原理,并分享了一个关于Druid无法识别Informix数据库驱动的问题。作者指出,尽管Druid支持Informix驱动,但在实际使用中仍出现'not support'错误。对比了HikariCP数据源的成功连接,作者建议检查配置并手动指定DriverClass,同时注意到Druid的防火墙配置可能影响连接。在源码分析中,发现特定数据库类型未在wallFilter中支持,导致异常。
摘要由CSDN通过智能技术生成

估计很多人都没接触过informix(ps:我也没接触过),看druid的github上wiki里常见问题里第27条"Druid如何自动根据URL自动识别DriverClass的"里面有

jdbc:informix-sqlicom.informix.jdbc.IfxDriver

估计是支持的,建议可以尝试使用druid的最新版本(目前是1.1.10)试试

是这个样子的,我更新了一下informix的驱动,后来启动的时候发现druid的主页实际上已将加载了这个驱动了,但是当我访问数据库的时候,依旧显示的是dbtype not support这个也是我不明白的地方,但是相同的配置我换了一下数据源HikariCP 就可以连接了

回复 @鱼在_水中游 : 呃,我看了一下druid的初始化源码,驱动判断上是有informix的,你可以尝试一下在配置里写上DriverClass,而不是让他自动识别。另外我在源码里全搜索了一下not support,只找到了一个“getCreateTableScript dbType not support”,你可以看看是不是这个错并非druid报的而是你的dao层框架报的呢?

但是目前我在使用的时候是显示不识别的,而且我换了多个版本了都是不行

请问楼主是否解决了,我现在也有这个问题org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection: dbType not support : informix,

你是不是配置了druid的防火墙,因为我有次经历就是配置了防火墙,抛出了IllegalStateException dbType not support. 但是是支持监控的,查看datasource是有支持informix驱动的。

while(true) {

String realDriverClassName = driverClass.getName();

if(!realDriverClassName.equals("com.mysql.jdbc.Driver") && !realDriverClassName.equals("com.mysql.cj.jdbc.Driver")) {

if(!realDriverClassName.equals("oracle.jdbc.OracleDriver") && !realDriverClassName.equals("oracle.jdbc.driver.OracleDriver")) {

if(realDriverClassName.equals("com.informix.jdbc.IfxDriver")) {

this.exceptionSorter = new InformixExceptionSorter();

break;

}

但是在wallFilter的时候是没有对informix支持的。所以使用不支持的dbtype就抛IllegalStateException异常:

if(this.dbType == null) {

this.dbType = JdbcUtils.getDbType(dataSource.getUrl(), (String)null);

}

if(!"mysql".equals(this.dbType) && !"mariadb".equals(this.dbType) && !"h2".equals(this.dbType) && !"presto".equals(this.dbType)) {

if(!"oracle".equals(this.dbType) && !"AliOracle".equals(this.dbType)) {

if(!"sqlserver".equals(this.dbType) && !"jtds".equals(this.dbType)) {

if(!"postgresql".equals(this.dbType) && !"edb".equals(this.dbType)) {

if(!"db2".equals(this.dbType)) {

throw new IllegalStateException("dbType not support : " + this.dbType + ", url " + dataSource.getUrl());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值