zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    单例模式
    简单的WPS二次开发脚本
    使用DevExpress改变WinForm皮肤(VS)
    步入DevExpress的使用(VS)
    设置PdfPTable与标题间的距离
    tar: Removing leading `/’ from member names
    MySQL关闭过程详解和安全关闭MySQL的方法
    Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
    解决Centos关闭You have new mail in /var/spool/mail/root提示
    hping3命令
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14847753.html
Copyright © 2011-2022 走看看