首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到同一台服务器上多个MySQL数据库的JDBC连接池(使用相同的用户和密码)

问到同一台服务器上多个MySQL数据库的JDBC连接池(使用相同的用户和密码)
EN

Stack Overflow用户
提问于 2013-04-26 22:58:45
回答 1查看 3.1K关注 0票数 1

我有多个网站(大约200个)由同一个Java web应用程序托管。每个站点都有自己的MySQL数据库。这些数据库都在同一个MySQL服务器上,并且都使用相同的用户名和密码进行访问。

由于我实现池化的方式,我目前正在耗尽数据库连接。我为每个站点的数据库使用了一个C3P0 ComboPooledDataSource。这会创建数百个到数据库服务器的连接,而数据库服务器似乎无法处理它。

是否有创建数据库连接池的池化机制,该连接池可用于单个数据库服务器上托管的所有数据库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 23:04:19

我发现我可以为第一个数据库创建一个ComboPooledDataSource。然后,当我从数据库池中获得一个连接时,我可以在该连接上调用setCatalog(name),以便使用C3P0数据池使用同一台服务器上的任何其他数据库。

代码语言:javascript
复制
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技术也适用于它,但是创建连接的语法不同:

代码语言:javascript
复制
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");
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16239487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档