Объединение источников данных DBCP?

Я реализую соединение Apache DBCP, чтобы повысить эффективность моей программы, выполняющей несколько запросов.

Проблема в том, что просто иметь пул соединений недостаточно, потому что у меня также есть несколько источников данных (у меня есть m - datasaources, и каждый источник данных имеет n - соединений).

Как решить эту проблему?

Нужны ли мне пулы соединений для каждого источника данных? Есть ли пул для источников данных?


person user1658192    schedule 10.09.2012    source источник


Ответы (1)


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

person Frank Pavageau    schedule 10.09.2012
comment
Это означает, что мне нужна своего рода синхронизированная хэш-карта для объектов PoolingDataSource? - person user1658192; 10.09.2012
comment
Почему? Просто создайте все пулы во время запуска и сохраните их в неизменном Map (с помощью Collections.unmodifiableMap() или Guava ImmutableMap например.Поскольку его нельзя изменить, его не нужно синхронизировать. - person Frank Pavageau; 10.09.2012
comment
Поскольку я создаю источники данных динамически, поэтому не могу создать их при запуске. - person user1658192; 10.09.2012
comment
Опять же, почему? Вы можете создать пул, изначально содержащий 0 соединений, динамически создавая соединения по мере необходимости; динамическое создание источников данных немного странно. Вы имеете в виду, что при запуске не знаете, какие источники данных можно использовать? Они создаются после некоторого пользовательского ввода? В этом случае (если необходимо) используйте ConcurrentHashMapputIfAbsent()) или Guava's LoadingCache, который решит все проблемы параллелизма за вас. - person Frank Pavageau; 10.09.2012