dremio 16 升级问题

dremio 16 很早就发布了,今天打算升级下,但是碰到了一个意想不到的问题,驱动兼容问题

问题描述

因为dremio 16 开始,默认官方自己保证的datasource支持了ide时间处理,所以大部分以前开发的驱动运行是有问题的(目前测试16之前的基本都应该会有问题,出过官方的driver)

问题

 

 

所以问题就比较突出了,好多依赖此函数创建datasource 都会有问题

解决方法

自己包装一个规避比问题,参考如下

package com.dalong.exec.store.jdbc;
 
import com.dremio.exec.store.jdbc.CloseableDataSource;
import com.google.common.base.Preconditions;
import java.sql.Driver;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import javax.sql.ConnectionPoolDataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.datasources.SharedPoolDataSource;
 
public final class MyDataSources {
    public enum CommitMode {
        FORCE_AUTO_COMMIT_MODE, FORCE_MANUAL_COMMIT_MODE, DRIVER_SPECIFIED_COMMIT_MODE;
    }
 
    public static CloseableDataSource newGenericConnectionPoolDataSource(String driver, String url, String username, String password, Properties properties, CommitMode commitMode, int maxIdleConns, long idleTimeSec) {
        Preconditions.checkNotNull(url);
        try {
            Class.forName((String) Preconditions.checkNotNull(driver)).asSubclass(Driver.class);
        } catch (ClassNotFoundException | ClassCastException e) {
            throw new IllegalArgumentException(String.format("String '%s' does not denote a valid java.sql.Driver class name.", new Object[]{driver}), e);
        }
        BasicDataSource source = new BasicDataSource();
        source.setMaxTotal(2147483647);
        source.setTestOnBorrow(true);
        source.setValidationQueryTimeout(1);
        source.setMaxIdle(maxIdleConns);
        source.setSoftMinEvictableIdleTimeMillis(idleTimeSec);
        source.setTimeBetweenEvictionRunsMillis(10000L);
        source.setNumTestsPerEvictionRun(100);
        source.setDriverClassName(driver);
        source.setUrl(url);
        if (properties != null)
            properties.forEach((name, value) -> source.addConnectionProperty(name.toString(), value.toString()));
        if (username != null)
            source.setUsername(username);
        if (password != null)
            source.setPassword(password);
        switch (commitMode) {
            case FORCE_AUTO_COMMIT_MODE:
                source.setDefaultAutoCommit(Boolean.valueOf(true));
                break;
            case FORCE_MANUAL_COMMIT_MODE:
                source.setDefaultAutoCommit(Boolean.valueOf(false));
                break;
        }
        return CloseableDataSource.wrap(source);
    }
 
    public static CloseableDataSource newSharedDataSource(ConnectionPoolDataSource source, int maxIdleConns, long idleTimeSec) {
        SharedPoolDataSource ds = new SharedPoolDataSource();
        ds.setConnectionPoolDataSource(source);
        ds.setMaxTotal(2147483647);
        ds.setDefaultTestOnBorrow(true);
        ds.setValidationQueryTimeout(1);
        ds.setDefaultMaxIdle(maxIdleConns);
        ds.setDefaultSoftMinEvictableIdleTimeMillis(TimeUnit.SECONDS.toMillis(idleTimeSec));
        ds.setDefaultTimeBetweenEvictionRunsMillis(10000L);
        ds.setDefaultNumTestsPerEvictionRun(100);
        return CloseableDataSource.wrap(ds);
    }
}

说明

关于以前开发的sql server 驱动就有此问题,解决方法就如上,基本上社区以前大家开发的驱动都会有类似的问题,一点吐槽官方的是已经发布tar包了
但是私服就是没有更新,造成自己编译driver 包很费事

参考资料

https://github.com/rongfengliang/my-dremio-mssql-connector

posted on 2021-06-04 00:12  荣锋亮  阅读(137)  评论(0编辑  收藏  举报

导航