2011-02-25 2 views
33

У меня есть базовое приложение Spring JDBC с довольно базовой конфигурации:Spring JDBC пул соединений передовой практики

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> 
    <property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:XXX"/> 
    <property name="username" value="username"/> 
    <property name="password" value="password"/> 
</bean> 

<bean id="dbThing" class="com.DbThing"> 
    <property name="dataSource" ref="myDataSource"/> 
</bean> 

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

Библиотеки, которые, как представляется, имеют больше кредитов на SO, являются CP30 и DBCP. Поскольку я использую Oracle, я мог бы также использовать pooled data source, предлагаемый драйвером. Я понимаю, что доступно больше библиотек - например, новые библиотеки пула Apache Tomcat 7.

Есть ли какая-нибудь библиотека, которую я должен действительно избегать?

Есть ли рекомендуемая конфигурация, которую я должен использовать с данной библиотекой?

Любая «история войны», которую вы хотите разделить?

ответ

19

Развитие C3PO и DBCP заглохло в основном потому, что они зрелые. Я видел, что оба этих драйвера могут поддерживать сотни транзакций в секунду.

Пул Tomcat - это обновленный драйвер DBCP, обновленный &. MyBatis 3.0 также содержит собственную реализацию объединения, которая, основываясь на проверке кода, кажется солидной. Наконец, есть BoneCP, который утверждает, что имеет лучшую производительность. Я еще не использовал ни одного из них в проекте.

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

+3

BoneCP больше не активен. Вы также можете посмотреть на HikariCP, который является фиксированным пулом соединений и имеет отличные преимущества. [HikariCP] (https://github.com/brettwooldridge/HikariCP) для своей веб-страницы. – muruga

17

В качестве альтернативы BoneCP вы, возможно, попробовали собственный пул соединений с базой данных Oracle?

У меня были хорошие впечатления в течение последних нескольких недель, так что, возможно, стоит потратить на это выстрел. Кроме того, я полагаю, что Oracle будет знать кое-что о создании пула соединений, особенно когда они спарены со своими собственными база данных.

<bean id="dataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource"> 
    <property name="URL" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

UPDATE: Кроме того, если вы используете (один из) последние драйвера Oracle JDBC (11.2.0.1+), вы можете попробовать новый универсальный Connection Pool. OracleConnectionPoolDataSource, похоже, официально устарел в пользу этого пула. Однако некоторые пользователи сообщают об ошибках, используя это, поэтому может быть слишком рано. Я в состоянии использовать последние JDBC-драйверы Oracle, поэтому я дам ему попробовать и обновить здесь, как только у вас есть информация об этом.

Более подробная информация об этом СЦ теме: Oracle UCP

8

BoneCP была утверждая, но новый инструмент вводится, названный HiKariCP она преодолена много недостатков, которые присутствовали в инструментах пропусков вы можете настроить его под изменением в application-context.xml

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> 
    <property name="maximumPoolSize" value="10" /> 
    <property name="minimumPoolSize" value="2" /> 
    <property name="dataSourceClassName" 
      value="oracle.jdbc.pool.OracleDataSource" /> 
    <property name="dataSourceProperties" ref="props" /> 
    <property name="poolName" value="springHikariCP" /> 
</bean> 

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> 
     <constructor-arg ref="hikariConfig" /> 
</bean> 

<util:properties id="props" location="classpath:datasource.properties"/> 

где database.properties вы должны предоставить подробную информацию о базе данных, как показано ниже

url=jdbc:oracle:thin:@IP:port:SID/Databasename 
user=usernmae 
password=password 

Для правильной демонстрации вы можете использовать this link

+1

спасибо за ответ, это помогает снять нагрузку с нас разработчиков HikariCP. – brettw

+0

ваш приветствующий @brettw, если его помощь полна вам, вы можете его проголосовать :) –

+1

Спасибо за внимание HiKaRi!. Небольшое обновление hikariConfig. Не знаю, как отформатировать комментарий: <свойство name = "jdbcUrl" value = "$ {db.url}" /> <свойство name = "username" value = "$ {db. username} "/>

Смежные вопросы