使用Spring在Ciber的Hibernate属性中不会启动C3P0?

时间:2011-07-27 08:40:38

标签: hibernate spring maven c3p0

我正在使用Hibernate 3.3.1GA和Spring 3.0.2(以及来自eclipse的Maven)。我将c3p0-0.9.1 jar添加到classpath,并首先尝试了这种方法(在数据源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 类。我尝试了一些其他版本的hibernate(3.3.2,3.6.0),但仍然发生了同样的事情(没有C3P0ConnectionProvider类在jar文件中)。我特意删除 connection.providerclass 属性,没有区别。

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

    

<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