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

时间:2018-03-26 19:30:11

标签: java spring-jdbc hikaricp presto

我正在尝试使用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 base 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>

2 个答案:

答案 0 :(得分:2)

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

hikariDataSource.setAutoCommit(false);

虽然您的Presto驱动程序不支持此操作,但会抛出异常。从setAutoCommit(false)中删除@Bean。这在open issue #3592中进行了讨论。

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

答案 1 :(得分:1)

最近遇到了这个问题,偶然发现了github上的this讨论。 我尝试了hikari CP和公共dbcp两者并尝试了autoCommit(true)和(false)但似乎没有任何工作。

在spring-jdbc中,我看到多个调用发生在PrestoConnection类中,其中一次boolean autoCommit为false,导致出现此错误。 溶液

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

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