我了解到要在hibernate中配置c3p0池,我们可以在hibernate.cfg.xml中编写配置如下:
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.timeout">600</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
但是我使用Spring配置了Hibernate。当我尝试在下面做时,它不起作用:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/news_loader" />
<property name="username" value="blah" />
<property name="password" value="blah" />
<property name="hibernate.c3p0.min_size" value="2" />
<property name="hibernate.c3p0.max_size" value="5" />
<property name="hibernate.c3p0.timeout" value="600" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.idle_test_period" value="300"/>
<property name="hibernate.c3p0.acquire_increment" value="1" />
</bean>
我已经阅读过使用可以使用Spring配置的独立c3p0池,但有没有办法可以使用Spring在Hibernate中配置内置的c3p0池?
启发我因为我是初学者。
答案 0 :(得分:26)
以下是有关如何在数据源中配置c3p0的示例配置(来自我们的应用程序):
<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>
我们使用外部属性文件来配置一些参数,但也可以在Spring中直接配置它们。
如果你想让hibernate处理池,那么你需要配置Session属性:
<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>
您必须使用以下方法之一:在数据源池中或者在休眠会话中使用池。永远不要同时使用它们,因为它会浪费资源。
答案 1 :(得分:2)
使用spring配置,您使用的是dbcp而不是cp30。 Spring正在创建数据源/连接池的实例。要为dbcp set配置simillar参数,它们直接具有属性
<property name="maxActive" value="5"/>
<property name="minIdle" value="2"/>
等。您可以通过查看BasicDataSource的javaodoc或配置页面http://commons.apache.org/dbcp/configuration.html来了解可用的属性。