休眠 c3p0 和 Spring。 bean class [org.hibernate.c3p0.internal.C3P0ConnectionProvider] 的 属性 'driverClassName' 无效

Hibernate c3p0 and Spring. Invalid property 'driverClassName' of bean class [org.hibernate.c3p0.internal.C3P0ConnectionProvider]

我目前正在开发一个使用休眠和 Spring MVC 的应用程序。 我想实现c3p0,但我不明白如何实现它。

我使用了可选文件夹中的 c3p0 jar,Hibernate-c3p0-5.0.2.jarc3p0-0.9.2.1.jar.

这些是我的配置。

现在,我正在使用 Spring 中的 DriverManagerDatasource

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean> 

我试过这样做

<bean id="dataSource" class="org.hibernate.c3p0.internal.C3P0ConnectionProvider">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />

    <!-- C3P0 Config -->
    <property name="hibernate.c3p0.acquire_increment" value="1" />
    <property name="hibernate.c3p0.idle_test_period" value="100" />
    <property name="hibernate.c3p0.max_size" value="10" />
    <property name="hibernate.c3p0.max_statements" value="10" />
    <property name="hibernate.c3p0.min_size" value="10" />
    <property name="hibernate.c3p0.timeout" value="100" />
</bean>

但我遇到了错误。

Invalid property 'driverClassName' of bean class [org.hibernate.c3p0.internal.C3P0ConnectionProvider]

TIA。

driverClassNameDriverManagerDataSource 属性,而不是 C3P0ConnectionProvider 上的 属性。这就是您收到错误的原因。

而不是使用 Spring DriverManagerDataSource,这只是一个简单的 DataSource 实现,根本不是连接池,您想使用 C3P0 的 DataSource 实现.尝试使用 ComboPooledDataSource。该实现还有一个 driverClassName 属性,您需要将其设置为等于您的 数据库 驱动程序(如 MySQL 驱动程序或其他)。

这是我举起 web page:

的一个例子
    cpds = new ComboPooledDataSource();
    cpds.setDriverClass("com.mysql.jdbc.Driver"); //loads the jdbc driver
    cpds.setJdbcUrl("jdbc:mysql://localhost/test");
    cpds.setUser("root");
    cpds.setPassword("root");

那不是 Spring,只是调整一下放在 Spring 中。 class 全名是 com.mchange.v2.c3p0.ComboPooledDataSource。你可以看到一个 Spring-based 例子 here.

我知道这个问题很老,但对于新手来说,希望它能有所帮助。 问题出在你的名字标签上

替换:

    <bean id="dataSource" class="org.hibernate.c3p0.internal.C3P0ConnectionProvider">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

    <bean id="dataSource" class="org.hibernate.c3p0.internal.C3P0ConnectionProvider">
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

...

请注意:使用driverClass代替driverClassName,使用jdbcUrl代替url,user 用于代替用户名,password 是......这些是 ComboPooledDataSource 的参数 希望对您有所帮助