10

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プーリングを構成する方法はありますか?

私は初心者です。

4

2 に答える 2

27

データソースで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>

データソースのプールまたは休止状態のセッションのプールのいずれかのアプローチを使用する必要があります。リソースを浪費するため、両方を使用しないでください。

于 2011-04-05T15:54:04.887 に答える
2

スプリング構成では、cp30の代わりにdbcpを使用しています。Springはデータソース/接続プールのインスタンスを作成しています。dbcp setの同様のパラメーターを構成するには、それらに直接プロパティがあります

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

など。利用可能なプロパティについては、BasicDataSourceのjavaodocを参照 するか、構成ページhttp://commons.apache.org/dbcp/configuration.htmlから確認できます。

于 2011-04-05T16:00:21.997 に答える