gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:31:38 25 4
gpt4 key购买 nike

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

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

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

最佳答案

我发现我可以为第一个数据库创建一个 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");
...

关于java - JDBC连接池到同一台服务器上的多个MySQL数据库(使用相同的用户和密码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com