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) } }); };
问题解答
- 任务完成后连接是否会自动立即释放?若不会,如何手动释放?
- 你当前用
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; // 处理查询结果 }); });
- 当前从连接池获取连接的方式是否正确?
- 是正确的。
con.query()是mysql2连接池提供的简化用法,它会自动从连接池中取出可用连接,执行SQL后再把连接归还到池里,无需手动管理连接的生命周期,非常适合单SQL查询的场景。如果需要在同一个连接上执行多个连续操作(比如事务),再考虑手动获取连接的方式。
内容的提问来源于stack exchange,提问作者PeakGen
相关产品推荐
相关产品推荐

