2014-11-06 2 views
1

Я разрабатываю инструмент, который получает различные параметры подключения для тестирования значений в разных базах данных (плагин для Nagios в jNRPE, который поддерживает открытое соединение с различными базами данных). Поскольку конфигурация является динамической (может быть больше баз данных или их можно удалить), у меня не может быть файла конфигурации.Несколько источников данных для C3P0

Я хочу знать, должен ли я иметь экземпляр C3P0 для каждой базы данных или могу ли я использовать один и тот же экземпляр и просто изменять URL-адрес каждый раз, когда я прошу установить соединение?

Код на GitHub: https://github.com/angoca/db2-jnrpe/blob/master/src/main/java/com/github/angoca/db2_jnrpe/database/pools/c3p0/DBCP_c3p0.java

Если нет, то как я могу получить несколько пул для нескольких баз данных динамически?

ответ

1

Для каждого URL-адреса JDBC вам понадобится другой источник данных c3p0. Пул соединений должен содержать однородные соединения: все проверенные соединения должны быть эквивалентны с точки зрения клиента. Если в один и тот же пул были включены соединения из нескольких баз данных, у клиентов не было бы возможности указать или знать, с кем они общались.

(Если вы реплицируете, скажем, базу данных только для чтения, и вам действительно нужны соединения из нескольких источников, чтобы жить в одном пуле, поскольку они гарантированно эквивалентны с точки зрения клиента, вы можете сделать это путем определения настраиваемого, неохлажденного DataSource, который циклически или произвольно выбирает репликант, а затем объединяет DataSource через фабрику данных DataSources c3p0.)

Очень легко динамически создавать и настраивать источники данных c3p0. См. Пример кода here.

Если вы импортируете свою динамическую конфигурацию в качестве карты имен свойств c3p0 в значения, есть также alternative, more concise way, чтобы получить источник данных с этой конфигурацией.

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