Какой источник данных в пуле я должен использовать для Spring 3.1.0, Hibernate 4.0.1.Final и MySQL 5.1? - PullRequest
6 голосов
/ 17 марта 2012

Я использую Spring 3.1.0.RELEASE, Hibernate 4.0.1.Final и MySQL 5.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 я не могу использовать файл hibernate.cfg.xml при настройке моего фабричного компонента сеанса (который я пытался сделать так - фрагмент из файла контекста приложения Spring) ..)

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

Ответы [ 4 ]

5 голосов
/ 19 марта 2012

Если вы хотите использовать что-то зрелое и производительность (например, не 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 выполняет намного лучше.

5 голосов
/ 17 марта 2012

Вы можете использовать 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>

несколько замечаний

  • вы можете настроить максимальное количество соединений.
  • вы можете настроить минимальное количество незанятых соединений.
  • запрос, который будет выполнен для проверки соединения, все еще действителен.

Для настройки доступны другие параметрыкогда проверка происходит.

1 голос
/ 13 декабря 2014

В основном это зависит от вашего приложения.

Ниже приведены условия (взяты из здесь ):

  1. Для тестовых или автономных сред вне контейнера J2EE используйте DriverManagerDataSource
  2. Для использования в контейнере J2EE рекомендуется использовать JNDI DataSource предоставляется контейнером.
  3. Для использования источника данных пула соединений вне контейнера J2EE рассмотрите Apache's Jakarta Commons DBCP или C3P0.
1 голос
/ 19 марта 2012

Apache DBCP - широко используемый пул.Но не используйте его параметр testWhileIdle.При включении это фоновый поток evictor блокирует все новые соединения, обслуживающие во время проверки мертвых соединений.Это недопустимо в любой не игрушечной среде.Кроме того, у нас нет проблем с этим.

Вы можете узнать больше о пулах в этом SO-потоке , но имейте в виду, что все флеймы о "самом быстром пуле" имеют смысл только при конкретной настройке под конкретную нагрузку.

...