Пул соединений JDBC с несколькими базами данных MySQL на одном сервере (с одним и тем же пользователем и паролем)

У меня есть несколько веб-сайтов (около 200), которые размещены в одном и том же веб-приложении Java. Каждый сайт имеет свою базу данных MySQL. Все базы данных находятся на одном сервере MySQL, и все они доступны с одним и тем же именем пользователя и паролем.

В настоящее время у меня заканчиваются подключения к базе данных из-за того, как я реализовал пул. Я использую ComboPooledDataSource C3P0 для базы данных каждого сайта. Это создает сотни подключений к серверу базы данных, и сервер базы данных просто не может с этим справиться.

Существует ли механизм объединения, который создает пул подключений к базе данных, который можно использовать для всех баз данных, размещенных на одном сервере базы данных?


person Stephen Ostermiller    schedule 26.04.2013    source источник


Ответы (1)


Я узнал, что могу создать ComboPooledDataSource для первой базы данных. Затем, когда я получаю соединение из пула баз данных, я могу вызвать setCatalog(name) для соединения, чтобы использовать любую другую базу данных на том же сервере, используя C3P0 объединение данных.

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/site_a");
cpds.setUser(user);
cpds.setPassword(pass);
....
Connection conn = getPool().getConnection();
conn.setCatalog("site_b");
...

Изменить: после написания этого поста я переключился на Proxool. Для него работает та же техника, что и для setCatalog, но синтаксис создания соединения другой:

try {
    Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e) {
    throw new RuntimeException(e);
}
Properties info = new Properties();
info.setProperty("proxool.maximum-connection-count", "20");
info.setProperty("proxool.house-keeping-test-sql", " select CURDATE()");
info.setProperty("user", user);
info.setProperty("password", pass);
info.setProperty("proxool.alias", "mypoolname");
info.setProperty("proxool.url", "jdbc:mysql://localhost:3306/site_a");
info.setProperty("proxool.driver", "com.mysql.jdbc.Driver");
String url = "proxool.mypoolname";
ProxoolDatabasePool pool = new ProxoolDatabasePool(url, info);
....
Connection conn = pool.getConnection();
conn.setCatalog("site_b");
...
person Stephen Ostermiller    schedule 26.04.2013
comment
Эй, этот класс ComboPooledDataSource является сторонней библиотекой или...? - person Zuko; 12.08.2014
comment
Спасибо за это. посмотрю. - person Zuko; 12.08.2014