6

Spring 3.1.0.RELEASE、Hibernate 4.0.1.Final、およびMySQL5.1を使用しています。使用する必要があるプールされたデータソースは何ですか?私は現在使用しています(アプリケーションコンテキストファイルからのスニペット)...

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:mysql://localhost:3306/myproj</value>
    </property>
    <property name="username">
        <value>myproj</value>
    </property>
    <property name="password">
        <value>password</value>
    </property>
</bean>

ただし、これはプールされたデータソースではなく、呼び出しごとにJDBC接続を作成します。以前はこのHibernate構成(hibernate.cfg.xml)を持っていました...

<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myproj</property>
    <property name="hibernate.connection.username">myproj</property>
    <property name="hibernate.connection.password">password</property>
    <property name="hibernate.connection.pool_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    ...

しかし、Spring 3.1.0のバグのため、セッションファクトリBeanを構成するときにhibernate.cfg.xmlファイルを使用できません(これは、Springアプリケーションコンテキストファイルからのスニペットです...)

<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="sessionFactory">
    <property name="configLocation"> 
        <value>classpath:hibernate.cfg.xml</value> 
    </property>
4

4 に答える 4

5

Apache DBCPを使用できます。これは、次のような置換のドロップになるはずです。

<bean id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="maxActive" value="10"/> 
    <property name="minIdle" value="5"/> 
    <!-- SELECT 1 is a simple query that returns 1 row in MySQL -->
    <property name="validationQuery" value="SELECT 1"/> 
</bean>

注意すべき点がいくつかあります

  • 接続の最大数を設定できます。
  • アイドル接続の最小数を設定できます。
  • 接続を検証するために実行されるクエリは引き続き有効です。

検証が行われるタイミングを構成するための追加のオプションがあります。

于 2012-03-16T23:33:00.550 に答える
5

成熟したパフォーマンスの高いもの(Apache DBCPではないなど)を使用する場合は、BoneCPを使用します。

微調整できるオプションは次のとおりです。

<!-- BoneCP configuration -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
   <property name="driverClass" value="com.mysql.jdbc.Driver" />
   <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/yourdb" />
   <property name="username" value="root"/>
   <property name="password" value="abcdefgh"/>
   <property name="idleConnectionTestPeriod" value="60"/>
   <property name="idleMaxAge" value="240"/>
   <property name="maxConnectionsPerPartition" value="30"/>
   <property name="minConnectionsPerPartition" value="10"/>
   <property name="partitionCount" value="3"/>
   <property name="acquireIncrement" value="5"/>
   <property name="statementsCacheSize" value="100"/>
   <property name="releaseHelperThreads" value="3"/>
</bean>

BoneCPフォーラムは非常に活発で、コミッターは非常に敏感です。

あなたが見ることができる(聞くだろう)もう一つはC3POですが、BoneCPの方がはるかに優れています。

于 2012-03-19T01:14:46.163 に答える
2

Apache DBCPは、広く使用されているプールです。ただし、そのオプションは使用しないでくださいtestWhileIdle。有効にすると、バックグラウンドのevictorスレッドが、デッド接続をチェックしながらサービスを提供するすべての新しい接続をロックします。おもちゃ以外の環境では受け入れられません。これ以外は問題ありません。

このSOスレッドでプールの詳細を読むことができますが、「最速のプール」に関するすべての炎は、特定の負荷の下で特定の調整を行う場合にのみ意味があることに注意してください。

于 2012-03-18T20:50:12.447 に答える
2

基本的にそれはあなたのアプリケーションに依存します。

以下の条件があります(ここから取得):

  1. J2EEコンテナ外のテスト環境またはスタンドアロン環境の場合は、次を使用します。DriverManagerDataSource
  2. J2EEコンテナで使用するJNDI DataSource 場合は、コンテナが提供するものを使用することをお勧めします。
  3. J2EEコンテナの外部で接続プールデータソースを使用する場合は、ApacheのJakartaCommons DBCPまたはを検討してC3P0ください。
于 2014-12-13T05:25:35.727 に答える