Nodejs node-mysql pool如何关闭?

Nodejs node-mysql pool如何关闭?

var mysql = require(‘mysql’); var pool = mysql.createPool(…);

pool.getConnection(function(err, connection) { // Use the connection connection.query( ‘SELECT something FROM sometable’, function(err, rows) { // And done with the connection. connection.release();

// Don't use the connection here, it has been returned to the pool.

}); });

release只是单纯的将当前connection释放当pool中,否则如果请求的客户端多了,那数据库压力是不是很大?希望懂的人指点一下。


4 回复

当然可以。关于如何关闭 Node.js 中 node-mysql 模块的连接池,我们需要明确的是,通常情况下我们不需要手动关闭连接池,因为连接池会自动管理连接的生命周期。但是,如果你确实需要关闭连接池,可以通过调用 end 方法来实现。

示例代码

var mysql = require('mysql');

// 创建连接池
var pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'testdb'
});

// 使用连接池
pool.getConnection(function(err, connection) {
    if (err) throw err;
    
    // 使用连接执行查询
    connection.query('SELECT something FROM sometable', function(err, rows) {
        // 释放连接
        connection.release();
        
        if (err) throw err;
    });
});

// 关闭连接池
pool.end(function(err) {
    if (err) throw err;
    console.log('Connection pool closed');
});

解释

  1. 创建连接池

    var pool = mysql.createPool({
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'testdb'
    });
    

    这里我们使用 mysql.createPool 方法创建了一个连接池,配置了数据库的基本信息。

  2. 获取连接并执行查询

    pool.getConnection(function(err, connection) {
        if (err) throw err;
    
        connection.query('SELECT something FROM sometable', function(err, rows) {
            if (err) throw err;
    
            // 释放连接
            connection.release();
        });
    });
    

    我们通过 getConnection 方法从连接池中获取一个连接,并使用该连接执行 SQL 查询。执行完毕后,调用 connection.release() 将连接返回给连接池。

  3. 关闭连接池

    pool.end(function(err) {
        if (err) throw err;
        console.log('Connection pool closed');
    });
    

    当所有活动的连接都已返回到连接池时,可以调用 pool.end() 方法来关闭连接池。这将确保所有的空闲连接都被关闭,并且不再接受新的连接请求。

注意事项

  • connection.release() 并不是关闭连接,而是将其放回连接池以便后续重用。
  • pool.end() 是关闭连接池的方法,它会等待所有活动的连接被释放并关闭所有空闲连接。

这样,你就可以有效地管理和关闭 Node.js 中的 MySQL 连接池了。


放回连接池内的连接,在空闲一段时间后会被关闭回收的,空闲时间长度可以配置,注意看文档和源代码

thx.

对于node-mysql模块中的连接池,你可以通过调用end方法来关闭整个连接池。这会等待所有正在使用的连接返回到连接池,并且不再接受新的连接请求。

以下是一个简单的示例:

var mysql = require('mysql');
var pool = mysql.createPool({
    // 配置项...
});

pool.getConnection(function(err, connection) {
    if (err) throw err; // 处理错误

    // 使用连接...
    connection.query('SELECT something FROM sometable', function(err, rows) {
        // 结束查询后释放连接
        connection.release();

        // 如果需要立即关闭连接池,可以在这里调用end
        // pool.end();
    });
});

// 若要关闭连接池,可以在任何时候调用
pool.end(function(err) {
    if (err) throw err;
    console.log("MySQL connection pool closed.");
});

在这个例子中,pool.end() 方法会在所有活动的连接被释放后关闭连接池。这意味着,如果你有一些长时间运行的查询,它们可能在你尝试关闭连接池时仍在进行。因此,最好确保在调用 pool.end() 之前所有活动的查询都已完成。

connection.release() 确实是将连接放回连接池而不是完全关闭它,这是为了提高性能并避免频繁创建和销毁连接带来的开销。如果你的应用程序不再需要使用数据库连接,那么关闭连接池是个好主意,以确保不会消耗不必要的资源。

回到顶部