Spring 4 Hikari连接池ClassCastException

时间:2019-08-07 15:34:23

标签: spring postgresql jdbc google-cloud-sql hikaricp

我希望在我的Spring 4应用程序中使用Hikari连接池。该数据库是Google Cloud SQL Postgres数据库。

我在pom.xml中具有以下依赖性:

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.1.1</version>
    </dependency>

    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>3.3.1</version>
    </dependency>

在我的applicationContext.xml中,我有:

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="poolName" value="springHikariCP" />
    <property name="connectionTestQuery" value="SELECT 1" />
    <property name="dataSourceClassName" value="org.postgresql.Driver" />
    <property name="maximumPoolSize" value="10" />
    <property name="idleTimeout" value="30000" />

    <property name="dataSourceProperties">
        <props>
            <prop key="url">jdbc:postgresql://google/mydatabase?cloudSqlInstance=projectId:regionName:myInstance&amp;socketFactory=com.google.cloud.sql.postgres.SocketFactory</prop>
            <prop key="user">postgres</prop>
            <prop key="password">mypassword</prop>
        </props>
    </property>
</bean>


<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="hikariConfig" />
</bean>

但是我遇到了以下异常:

Caused by: java.lang.ClassCastException: Cannot cast org.postgresql.Driver to javax.sql.DataSource
        at java.lang.Class.cast(Class.java:3369)
        at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:102)

出什么问题了?

2 个答案:

答案 0 :(得分:1)

org.postgresql.jdbc.Driver不是javax.sql.DataSource,而是java.sql.Driver,因此不适用于属性dataSourceClassName,因为该属性需要一个{{1} } 班级名称。

如果要使用驱动程序(而不是javax.sql.DataSource),则应使用属性DataSource

所以:

driverClassName

答案 1 :(得分:0)

使用Hikari建议的PostgreSQL数据源:org.postgresql.ds.PGSimpleDataSource

 <property name="dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource" />
  

数据库驱动程序数据源类

     

PostgreSQL pgjdbc-ng com.impossibl.postgres.jdbc.PGDataSource   PostgreSQL PostgreSQL org.postgresql.ds.PGSimpleDataSource