2012-03-16 4 views
6

Я использую Spring 3.1.0.RELEASE, Hibernate 4.0.1.Final и MySQL 5.1. Что такое объединенный источник данных, который я должен использовать? Я в настоящее время использую (фрагмент из контекста приложения файла) ...Какой объёмный источник данных следует использовать для Spring 3.1.0, 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.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 при настройке моего сессия завод боб (который я пытался сделать, как это - фрагмент кода из приложения контекста файла пружинного ...)

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

ответ

5

Вы можете использовать Apache ГСБД, который должен быть падением замены что-то вроде этого:

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

несколько вещей Примечание

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

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

+0

Теперь org.apache.commons.dbcp2.BasicDataSource –

1

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

Подробнее о пулах можно узнать в this SO thread, но имейте в виду, что все пламя о «самом быстром пуле» имеют смысл только при определенной настройке при определенной нагрузке.

5

Если вы хотите использовать что-то зрелое и performant (например, не 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 forum очень активен, и Коммиттеры довольно отзывчивым.

Еще один, который вы можете посмотреть (будет слышать), - C3PO, хотя BoneCP выполняет много лучше.

1

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

Существует ниже условие (взято из here):

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