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 包很费事