首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL连接池超过了Java中的最大连接数

MySQL连接池超过了Java中的最大连接数
EN

Stack Overflow用户
提问于 2014-11-25 22:42:58
回答 2查看 4.1K关注 0票数 1

我有一个远程MySQL数据库。在Java中,我有一个连接池:

代码语言:javascript
复制
pool = new MysqlConnectionPoolDataSource();
pool.setURL("jdbc:mysql://1.2.3.4:3306/TEST?max-connections=100");
pool.setUser("USER");
pool.setPassword("PASSWORD");

连接的最大数目是100。现在,让我们创建100个线程:

代码语言:javascript
复制
for (int i = 0; i < 100; ++i) {
    Thread t = new Thread(new Client(i, pool));
    t.start();
}

这是在每个线程中运行的代码:

代码语言:javascript
复制
class Client implements Runnable {
    int id;
    MysqlConnectionPoolDataSource pool;
    public Client(int id, MysqlConnectionPoolDataSource pool) {
        this.id = id;
        this.pool = pool;
    }
    public void run() {
        while (true) {
            try {
                Connection conn = pool.getConnection();
                ResultSet set = conn.createStatement().executeQuery("SELECT * FROM SOMETHING");
                if (set.next()) {
                    System.out.println(id + " finished.");
                }
                set.close();
                conn.close();
                return;
            }catch (Exception e) {
                System.out.println("ERROR " + id + "  ->  " + e.getMessage());
            }
        }
    }
}

因此,我有一个具有100个最大连接的池,然后100个线程试图使用每个连接。

然而,表格中有几个错误:

错误30 ->用户已经有超过“max_user_connections”活动连接

但是为什么,如果连接的最大数目是100?

事实上,即使你把它改为

代码语言:javascript
复制
pool.setURL("jdbc:mysql://1.2.3.4:3306/TEST?max-connections=300");

问题依然存在。

当然,最终建立了连接,我可以执行查询。但我不明白为什么我会超过联系的数量。

EN

回答 2

Stack Overflow用户

发布于 2014-11-25 23:37:45

max_user_connectionsmy.ini中的服务器设置:参见这里。它与连接池、Java等无关。

票数 3
EN

Stack Overflow用户

发布于 2014-11-25 23:56:50

除非您是应用服务器供应商,否则不应该使用MysqlConnectionPoolDataSource.

ConnectionPoolDataSources而不是连接池。它们是连接池代码的供应商。除了创建这些物理连接之外,ConnectionPoolDataSource不应该做任何其他事情。

在任何情况下,物理连接直到您调用PooledConnection.close()时才会消失,调用conn.close()只会关闭逻辑连接,这要求调用ConnectionPoolDataSource上的任何侦听器,以便它可以恢复,但不能关闭物理连接以便再次分发。

因此,如果您在应用程序服务器中工作,请使用应用服务器的DataSources提供的池。

如果您需要独立的连接池,请使用第三方连接池,如BoneCP、c3p0或Apache DBCP。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27138175

复制
相关文章

相似问题

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