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 包很费事
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-06-04 Prisma 2 is Coming Soon
2019-06-04 amundsen 来自lyft 的开源数据发现平台
2019-06-04 packr 方便的潜入静态资源文件到golang 二进制文件中
2019-06-04 hasura skor 构建安装
2019-06-04 Lightning Web Components 组件生命周期(六)
2019-06-04 Lightning Web Components 组合(五)
2019-06-04 graphql-hooks hooks first 的graphql 客户端