java - 使用 Spring 在 Hibernate 中配置内置的 c3p0 池

标签 java hibernate spring c3p0

我了解到要在 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 池?

启发我,因为我是初学者。

最佳答案

这是一个关于如何在数据源中配置 c3p0 的示例配置(来 self 们的应用程序):

<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>

您必须使用其中一种方法:数据源池或 hibernate session 池。永远不要同时使用这两种方法,因为它会浪费资源。

关于java - 使用 Spring 在 Hibernate 中配置内置的 c3p0 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553890/

相关文章:

java - Hibernate - 解析映射文件(.hbm.xml)时出现问题

java - 无法在android中处理json数据

java - 对 ReentrantReadWriteLock#tryLock 失败的 jcstress 测试感到困惑

使用 c3p0 和 Tomcat : too many connections hibernate

java - Maven-properties-filtering-like 用于 Java 注释?

java - 从模板生成 Spring 上下文文件

java - 发现以元素 'global-method-security' 开头的无效内容

java - 如何在 Android 中播放音频文件?

Java 认为 C :\drive is hidden?

java - Hibernate分页机制