Как установить пул соединения в JDBC?

Кто-либо может обеспечить примеры или ссылки на то, как установить пул соединения JDBC?

От поиска google I видят много различных способов сделать это, и это довольно сбивает с толку.

В конечном счете мне нужен код для возврата a java.sql.Connection объект, но я испытываю затруднения при начале работы.. любые приветствующиеся предложения.

Обновление: не делает javax.sql или java.sql объединили реализации соединения? Почему не было бы лучше использовать их?

104
задан Luiggi Mendoza 23 June 2014 в 07:27
поделиться

7 ответов

Если вам нужен автономный пул подключений, я предпочитаю C3P0 вместо DBCP (что у меня упомянутый в этом предыдущем ответе ), у меня было слишком много проблем с DBCP при большой нагрузке. Использовать C3P0 очень просто.Из документации :

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver
cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
cpds.setUser("swaldman");
cpds.setPassword("test-password");

// the settings below are optional -- c3p0 can work with defaults
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);

// The DataSource cpds is now a fully configured and usable pooled DataSource 

Но если вы работаете на сервере приложений, я бы рекомендовал использовать встроенный пул соединений, который он предоставляет. В этом случае вам необходимо настроить его (см. Документацию вашего сервера приложений) и получить DataSource через JNDI:

DataSource ds = (DataSource) new InitialContext().lookup("jdbc/myDS");
100
ответ дан 24 November 2019 в 04:09
поделиться

Не изобретайте колесо.

Попробуйте один из легкодоступных сторонних компонентов:

  • Apache DBCP - Этот компонент используется внутри Tomcat и вами.
  • c3p0

Apache DBCP поставляется с различными примерами того, как настроить объединение javax.sql.DataSource. Вот один пример, который может помочь вам начать.

18
ответ дан 24 November 2019 в 04:09
поделиться

Как ответили другие, вы, вероятно, будете довольны Apache Dbcp или c3p0. Оба популярны и отлично работают.

По поводу вашего сомнения

Разве javax.sql или java.sql не имеют реализации пула соединений? Почему Почему не лучше использовать их?

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

4
ответ дан 24 November 2019 в 04:09
поделиться

Обычно, если вам нужен пул соединений, вы пишете приложение, которое работает в некоторой управляемой среде, то есть вы работаете на сервере приложений. В этом случае не забудьте проверить, какие средства пула соединений предоставляет ваш сервер приложений , прежде чем пробовать другие варианты.

Готовое решение будет лучше всего интегрировано с остальными средствами серверов приложений. Однако, если вы не работаете на сервере приложений, я бы порекомендовал Apache Commons DBCP Component . Он широко используется и обеспечивает все основные функции пула, которые требуются большинству приложений.

18
ответ дан 24 November 2019 в 04:09
поделиться

В Apache Commons есть библиотека для этой цели: DBCP . Если у вас нет странных требований к вашим пулам, я бы использовал библиотеку, так как она обязательно будет сложнее и сложнее, чем вы могли бы надеяться.

3
ответ дан 24 November 2019 в 04:09
поделиться

Я бы рекомендовал использовать библиотеку commons-dbcp . Существует множество примеров того, как его использовать, вот ссылка на простой ход . Использование очень простое:

 BasicDataSource ds = new BasicDataSource();
 ds.setDriverClassName("oracle.jdbc.driver.OracleDriver")
 ds.setUsername("scott");
 ds.setPassword("tiger");
 ds.setUrl(connectURI);
 ...
 Connection conn = ds.getConnection();

Вам нужно создать источник данных только один раз, поэтому обязательно прочтите документацию, если вы не знаете, как это сделать. Если вы не знаете, как правильно писать операторы JDBC, чтобы не допустить утечки ресурсов, вы также можете прочитать эту страницу Википедии .

16
ответ дан 24 November 2019 в 04:09
поделиться

В сервере приложений, который мы используем там, где я работаю (Oracle Application Server 10g, насколько я помню), пул обрабатывается сервером приложений. Мы получаем javax.sql.DataSource используя поиск JNDI с javax.sql.InitialContext.

это делается примерно так

try {     
   context = new InitialContext();
   jdbcURL = (DataSource) context.lookup("jdbc/CachedDS");
   System.out.println("Obtained Cached Data Source ");
}
catch(NamingException e)   
{  
    System.err.println("Error looking up Data Source from Factory: "+e.getMessage());
}

(Мы не писали этот код, он скопирован из этой документации)

.
7
ответ дан 24 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: