Configuring the built-in c3p0 pooling in Hibernate using Spring

前端 未结 2 1382
予麋鹿
予麋鹿 2020-12-05 06:18

I learned that to configure c3p0 pooling in hibernate, we can have write the configuration in hibernate.cfg.xml such this:



        
相关标签:
2条回答
  • 2020-12-05 06:44

    With the spring configuration you are using dbcp instead of cp30. Spring is creating an instance of the data source / connection pool. To configure simillar parameters for dbcp set them has properties directly

    <property name="maxActive" value="5"/>
    <property name="minIdle" value="2"/>
    

    etc. You can find out about the properties available by looking at the javaodoc for BasicDataSource or from the configuration page http://commons.apache.org/dbcp/configuration.html.

    0 讨论(0)
  • 2020-12-05 06:45

    Here is a sample configuration (from our application) on how to configure c3p0 in the datasource:

    <bean id="dataSourceGlobal" class="com.mchange.v2.c3p0.ComboPooledDataSource"
              destroy-method="close">
            <property name="driverClass" value="${driver}" />
            <property name="jdbcUrl" value="${server}" />
            <property name="user" value="${user}" />
            <property name="password" value="${passw}" /> 
    
            <!-- these are C3P0 properties -->
            <property name="acquireIncrement" value="${acquireIncrement}" />
            <property name="minPoolSize" value="${minPoolSize}" />
            <property name="maxPoolSize" value="${maxPoolSize}" />
            <property name="maxIdleTime" value="${maxIdleTime}" />
    </bean>
    

    We use an external property file to configure some parameters, but they can be configured directly in Spring too.

    If you want hibernate to take care of the pooling, then you need to configure the Session properties:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
        <!--suppress InjectionValueTypeInspection -->
        <property name="mappingResources" ref="hibernateMappingList" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop>
                <prop key="transaction.factory_class">
                    net.sf.hibernate.transaction.JDBCTransactionFactory
                </prop>
                <prop key="hibernate.transaction.factory_class">
                    net.sf.hibernate.transaction.JDBCTransactionFactory
                </prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
                <prop key="hibernate.jdbc.batch_size">0</prop>
    
                <prop name="hibernate.c3p0.min_size" value="2" />
                <prop name="hibernate.c3p0.max_size" value="5" />
                <prop name="hibernate.c3p0.timeout" value="600" />
                <prop name="hibernate.c3p0.max_statements" value="0" />
                <prop name="hibernate.c3p0.idle_test_period" value="300"/>
                <prop name="hibernate.c3p0.acquire_increment" value="1" />
          </props>
        </property>
    </bean>
    

    You must use one of the approaches: either pool at the datasource or pool at the hibernate Session. Never use both, as it wastes resources.

    0 讨论(0)
提交回复
热议问题