Spring 4 Hikari 连接池 ClassCastException

标签 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)

可能出了什么问题?

最佳答案

org.postgresql.jdbc.Driver 不是 javax.sql.DataSource,它是 java.sql.Driver,因此它不适用于属性 dataSourceClassName,因为该属性需要一个 javax.sql.DataSource 类名。

如果您想使用驱动程序(而不是DataSource),那么您应该使用属性driverClassName

所以:

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

关于Spring 4 Hikari 连接池 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57397901/

相关文章:

sql - 列表理解与 PostgreSQL 数组

java - Hibernate和图形设计,该走哪条路?

javax.naming.NameNotFoundException : Name [jdbc/spitterDS] is not bound in this Context. 无法找到 [jdbc]

java - 如何在 Spring Boot 中创建日志文件?

python - 如何使用 Python 的 DBAPI 来可移植地验证数据库模式?

Spring框架监控ThreadPoolTask​​Executor队列大小

arrays - Golang 从 postgresql 函数获取值,该函数返回一个 int 但也接收一个字符串数组

java - 如何从 Java 中的 ResultSetMetaData 获取不同的数据类型?

java - Mongodb java spring更新嵌套对象

java - Spring 启动 : How can I add tomcat connectors to bind to controller