【问题标题】:C3P0 won't start configured in Hibernate properties with Spring?C3P0 不会在 Spring 的 Hibernate 属性中开始配置?
【发布时间】:2011-10-14 01:42:27
【问题描述】:

我正在使用 Hibernate 3.3.1GA 和 Spring 3.0.2(以及来自 eclipse 的 Maven)。我将 c3p0-0.9.1 jar 添加到类路径中,并首先尝试了这种方法(在数据源 bean 中配置 c3p0):

<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${ora.driverClassName}" />
    <property name="jdbcUrl" value="${ora.url}" />
    <property name="user" value="${ora.username}" />
    <property name="password" value="${ora.password}" />

    <property name="minPoolSize" value="${minPoolSize}" />
    <property name="maxPoolSize" value="${maxPoolSize}" />
    <property name="maxIdleTime" value="${maxIdleTime}" />
    <property name="maxStatements" value="${maxStatements}" />
    <property name="acquireIncrement" value="${acquireIncrement}" />
</bean>

这似乎工作,因为我可以在 Eclipse 控制台中看到 c3p0 日志。
但是,当我尝试在 hibernate sessionFactory 属性中配置它时,如下所示:

<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" name="sessionFactory2">
    <property name="dataSource" ref="dataSource2" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.query.substitutions">true 1, false 0</prop>

            <!-- C3P0 properties (hibernate.c3p0.idle_test_period)  -->
            <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
            <prop key="hibernate.c3p0.min_size">1</prop>
            <prop key="hibernate.c3p0.max_size">20</prop>
            <prop key="hibernate.c3p0.timeout">600</prop>
            <prop key="hibernate.c3p0.acquire_increment">1</prop>
            <prop key="hibernate.c3p0.max_statements">50</prop>

        </props>
    </property>
    <property name="mappingResources">
        <list>
                     ...
        </list>
    </property>
</bean>

不起作用,c3p0 无法启动,没有输出,没有错误,什么都没有……
其实,我并不觉得很奇怪,因为当我从 Maven 存储库打开 hibernate-core-3.3.1.GA jar 时,我找不到 org.hibernate.connection.C3P0ConnectionProvider 类。我尝试了一些其他版本的休眠(3.3.2、3.6.0),但仍然发生同样的事情(jar 文件中没有 C3P0ConnectionProvider 类)。我想删除 connection.providerclass 属性,没有区别。

我在这里和其他论坛上阅读了大量相关问题,但我无法真正理解问题所在。 This 基本上是我的问题,但我没有发现它有用。我是否在属性配置中遗漏了某些内容,是我将它们命名错误还是什么?

谢谢。

【问题讨论】:

    标签: hibernate spring maven c3p0


    【解决方案1】:

    由于您使用的是 spring 数据源配置(您参考 dataSource2 bean),我认为会话工厂 bean 只是设置数据源,而 Hibernate 忽略了它自己的连接配置。

    如果第一种方法有效,为什么要使用第二种方法?

    【讨论】:

    • 我为什么要第二个?好吧,我并不是特别想要其中之一:) 我只是在尝试不同的选择,并试图找到最适合我需要的选择。我在某处读到,当启用 spring-aop 事务管理时,第一种方法可能更好,这就是我的情况。也许我还应该考虑在 JNDI 中配置数据源(使用 tomcat)?
    • 第一种方法对我很有帮助。
    【解决方案2】:

    虽然为我工作。我用过这样的东西

    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
      </props>
    </property>
    <property name="hibernate.dialect">
            org.hibernate.dialect.MySQLDialect
       </property>
        <property name="hibernate.connection.driver_class">
            ${hibernate.connection.driver_class}
       </property>
    
        <property name="hibernate.connection.url">
            ${hibernate.connection.url}
       </property>
        <property name="hibernate.connection.username">
            ${hibernate.connection.username}
       </property>
        <property name="hibernate.connection.password">
            ${hibernate.connection.password}
       </property>
    <property name="hibernate.c3p0.acquire_increment">1</property>
        <property name="hibernate.c3p0.min_size">1</property>
        <property name="hibernate.c3p0.max_size">3</property>
        <property name="hibernate.c3p0.timeout">1000</property>
        <property name="hibernate.c3p0.max_statements">2</property>
        <property name="hibernate.c3p0.numHelperThreads">3</property>
        <property name="hibernate.c3p0.idle_test_period">60</property>
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    

    -Raaghu.K

    【讨论】:

    • 这些属性是什么,你把它们放在哪里了(猜猜sessionFactorybean)?如果您不介意,请编辑您的问题以包含您的 xml 配置的更详细概述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多