alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.98k stars 8.59k forks source link

druid和log4jdbc一起使用的时候会出现not support oracle driver 1.0 #4336

Open hieastz opened 3 years ago

hieastz commented 3 years ago
<dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
  <version>1.16</version>
</dependency>

druid 1.1.24

log4jdbc只有驱动类在调用acceptsURL connect getPropertyInfo 这三个方法的时候 才会初始化 真实的驱动。 否则 在获取版本的时候 判断 真实的 驱动为null 然后返回版本号为1

    public int getMajorVersion()
    {
        if (lastUnderlyingDriverRequested == null) {
            return 1;
        } 
        return lastUnderlyingDriverRequested.getMajorVersion();
    }

druid在init方法中会进行oracle数据库版本检查。

protected void initCheck() throws SQLException {
        if (JdbcUtils.ORACLE.equals(this.dbType)) {
            isOracle = true;
           //此时未执行log4jdbc驱动类的 acceptsURL 或 connect 或 getPropertyInfo 三个中的任意一个方法
            if (driver.getMajorVersion() < 10) {
                throw new SQLException("not support oracle driver " + driver.getMajorVersion() + "."
                                       + driver.getMinorVersion());
            }

            if (driver.getMajorVersion() == 10 && isUseOracleImplicitCache()) {
                this.getConnectProperties().setProperty("oracle.jdbc.FreeMemoryOnEnterImplicitCache", "true");
            }

            oracleValidationQueryCheck();
        } else if (JdbcUtils.DB2.equals(dbType)) {
            db2ValidationQueryCheck();
        } else if (JdbcUtils.MYSQL.equals(this.dbType)
                || JdbcUtils.MYSQL_DRIVER_6.equals(this.dbType)) {
            isMySql = true;
        }

        if (removeAbandoned) {
            LOG.warn("removeAbandoned is true, not use in production.");
        }
    }

官方不打算兼容一下吗?

hieastz commented 3 years ago

官方对待这种问题的处理方式很奇怪,使用log4jdbc 肯定有自己的原因。

hieastz commented 3 years ago

能否支持一下,并且考虑本地化扩展驱动和url串的情况