使用mysql.createPool替代createConnection后查询完成是否需要释放连接
结论
你当前的查询写法不需要主动释放连接。
原因
你使用的Node.js生态常用mysql库(mysqljs)提供的pool.query()是封装好的快捷调用方法,内部会自动完成三个步骤:
- 从连接池申请空闲连接
- 执行你传入的SQL语句
- 执行完成(触发回调后)自动将连接释放回连接池
你的现有写法完全符合规范,不需要额外加释放逻辑。
补充说明
只有当你主动调用pool.getConnection()手动获取连接的场景下,才需要在使用完成后调用connection.release()将连接归还回连接池,示例写法如下:
dbConn.getConnection(function(err, connection) { if (err) throw err; // 用拿到的connection执行查询 connection.query("SELECT * FROM spesialisasi s ORDER BY s.nama_spesialisasi ASC", function (err, res) { // 手动释放连接,不释放的话这个连接会被一直占用无法被其他请求复用 connection.release(); if(err) { console.log("error: ", err); result(err, null); } else { result(null, res); } }); });
使用连接池替代单连接的方案本身就可以很好的解决你之前遇到的「空闲时间过长连接被服务端断开」的问题,连接池会自动维护连接的有效性、自动重试重连,更适合长期运行的服务端场景。
内容的提问来源于stack exchange,提问作者Ananda Pramono
相关产品推荐
相关产品推荐

