有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试使用SpringJDBC连接到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 base 1.5.10。释放

    <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>

共 (2) 个答案

  1. # 1 楼答案

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

    hikariDataSource.setAutoCommit(false);
    

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

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

  2. # 2 楼答案

    最近面对这个问题,在github偶然发现了this讨论。 我尝试了hikari CP和commons dbcp,也尝试了autoCommit(true)和(false),但似乎没有任何效果

    不知怎的,在spring jdbc中,我看到在PreToConnection类上发生了多个调用,其中boolean autoCommit一次为false,导致了这个错误。 解决方案

    1)重写创建的bean,以确保传递有效的参数

    2)升级到最新的0.197 presto jdbc,它对我很有效(正如Karol在回答中提到的)