Presto JDBC 连接池创建错误“不支持禁用自动提交模式”

Posted

技术标签:

【中文标题】Presto JDBC 连接池创建错误“不支持禁用自动提交模式”【英文标题】:Presto JDBC Connection Pool Creation ERROR "Disabling auto-commit mode not supported" 【发布时间】:2018-09-05 01:19:29 【问题描述】:

我正在尝试使用 Spring-JDBC 连接到 Presto,并且我正在使用 Hikari CP 作为数据源。 这是我的配置:

@Bean
public DataSource myDataSource() 
    HikariDataSource hikariDataSource = new HikariDataSource();
    hikariDataSource.setDriverClassName("com.facebook.presto.jdbc.PrestoDriver");
    hikariDataSource.setJdbcUrl("xxxxxxx");
    hikariDataSource.setMaximumPoolSize(10);
    hikariDataSource.setMinimumIdle(5);
    hikariDataSource.setIdleTimeout(10000);
    hikariDataSource.setConnectionTimeout(60000);
    hikariDataSource.setUsername("xxxx");
    hikariDataSource.setPassword("xxxx");
    hikariDataSource.setAutoCommit(false);

    return hikariDataSource;

在我的服务类中自动装配数据源时,我收到此错误:

java.sql.SQLFeatureNotSupportedException: Disabling auto-commit mode not supported
at com.facebook.presto.jdbc.PrestoConnection.setAutoCommit(PrestoConnection.java:126) ~[presto-jdbc-0.163.jar:0.163]

依赖关系:用于 Springboot 基础 1.5.10.RELEASE

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.7.8</version>
    </dependency>
    <dependency>
        <groupId>com.facebook.presto</groupId>
        <artifactId>presto-jdbc</artifactId>
        <version>0.163</version>
    </dependency>

【问题讨论】:

【参考方案1】:

您正在禁用自动提交模式:

hikariDataSource.setAutoCommit(false);

当您的 Presto 驱动程序不支持此操作并将引发异常时。从@Bean 中删除setAutoCommit(false)。这在open issue #3592 中进行了讨论。

另一种选择是将驱动程序更新到较新的版本,因为在 master 上自动提交是 already handled in PrestoConnection。最新版本是 0.197。

【讨论】:

【参考方案2】:

最近遇到了这个问题,偶然发现了thisgithub 上的讨论。 我尝试了 hikari CP 和 commons dbcp 并尝试了 autoCommit (true) 和 (false) 但似乎没有任何效果。

不知何故,在 spring-jdbc 中,我看到 PrestoConnection 类发生了多次调用,其中一次 boolean autoCommit 为 false 导致此错误。 解决方案

1) 覆盖创建的 bean 以确保传递有效参数

2)升级到最新的 0.197 presto-jdbc,它对我有用(如 Karol 的回答中所述)

【讨论】:

以上是关于Presto JDBC 连接池创建错误“不支持禁用自动提交模式”的主要内容,如果未能解决你的问题,请参考以下文章

Glassfish中的JDBC连接池ping错误

大数据Presto:Presto自定义函数和JDBC连接

在 prestosql/presto 容器中创建目录/模式/表

JDBC 连接池错误

在 GlassFish v4.1.1 中创建 jdbc 连接池 [重复]

Glassfish“连接已关闭”错误与连接池、JDBC 和 SQL Server 2008