You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中MySQL2连接池的连接释放及获取方式答疑

MySQL2连接池相关问题解答

代码示例

const mysql = require('mysql2');
const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');

const prop = PropertiesReader('properties.properties');

const con = mysql.createPool({
  connectionLimit : 10,
  host: prop.get('server.host'),
  user: prop.get("server.username"),
  password: prop.get("server.password"),
  port: prop.get("server.port"),
  database: prop.get("server.dbname")
});

exports.getCountryList = (event, context, callback) => {
  // allows for using callbacks as finish/error-handlers
  context.callbackWaitsForEmptyEventLoop = false;
  const sql = "select * from country_list";
  con.query(sql, function (err, result) {
    if (err) {
      log.console(err);
      var response = errorCodes.internal_server_error;
      callback(null, response);
    }
    else {
      var response = {
        "statusCode": 200,
        "headers": {
          "Content-Type": "application/json"
        },
        "body": JSON.stringify(result),
        "isBase64Encoded": false
      };
      callback(null, response)
    }
  });
};

问题解答

  1. 任务完成后连接是否会自动立即释放?若不会,如何手动释放?
  • 你当前用con.query()的方式,执行完回调后连接会自动放回连接池,不需要手动释放。mysql2连接池对这种便捷查询方法做了封装,内部会自动处理连接的获取和回收。
  • 只有当你手动调用con.getConnection()获取连接时,才需要在操作完成后调用connection.release()手动释放连接,示例代码:
con.getConnection((err, connection) => {
  if (err) throw err;
  connection.query('select * from country_list', (err, results) => {
    connection.release(); // 手动将连接归还到池里
    if (err) throw err;
    // 处理查询结果
  });
});
  1. 当前从连接池获取连接的方式是否正确?
  • 是正确的。con.query()是mysql2连接池提供的简化用法,它会自动从连接池中取出可用连接,执行SQL后再把连接归还到池里,无需手动管理连接的生命周期,非常适合单SQL查询的场景。如果需要在同一个连接上执行多个连续操作(比如事务),再考虑手动获取连接的方式。

内容的提问来源于stack exchange,提问作者PeakGen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:35:32