【问题标题】:Hibernate c3p0 and Spring. Invalid property 'driverClassName' of bean class [org.hibernate.c3p0.internal.C3P0ConnectionProvider]休眠 c3p0 和 Spring。 bean 类 [org.hibernate.c3p0.internal.C3P0ConnectionProvider] 的无效属性“driverClassName”
【发布时间】:2016-04-12 14:26:22
【问题描述】:

我目前正在开发一个使用 hibernate 和 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。

【问题讨论】:

    标签: spring hibernate spring-mvc c3p0


    【解决方案1】:

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

    替换:

        <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代替username和password 是……这些是 ComboPooledDataSource 的参数 希望有帮助

    【讨论】:

      【解决方案2】:

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

      您想使用 C3P0 的 DataSource 实现,而不是使用 Spring DriverManagerDataSource,它只是一个简单的 DataSource 实现而不是连接池。尝试使用ComboPooledDataSource。该实现还有一个 driverClassName 属性,您需要将其设置为等于您的 database 驱动程序(如 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。类的全名是com.mchange.v2.c3p0.ComboPooledDataSource。你可以看到一个基于Spring的例子here

      【讨论】:

      • 嗨。终于让它工作了谢谢,但我还有一个问题,如果我使用来自 c3p0-0.9.2.1.jar 的 com.mchange.v2.c3p0.ComboPooledDataSource,那么 Hibernate-c3p0-5.0.2.jar 有什么用?
      • Hibernate 为开发/测试目的提供了一个基本的连接池机制,但它不适用于生产。该 jar 允许您使用由 c3p0 支持的 Hibernate 的连接池。但是对于生产,您将放弃 Hibernate 连接池,而只使用“真正的”连接池 DataSource,如 c3p0、Hikari 等提供的。见docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多