我希望通过 NodeJS 与 MySQL 数据库一起使用连接池。根据文档,有两种方法可以做到这一点:要么我明确地从池中获取连接,使用它并释放它:
var pool = require('mysql').createPool(opts);
pool.getConnection(function(err, conn) {
conn.query('select 1+1', function(err, res) {
conn.release();
});
});
或者我可以这样使用它:
var mysql = require('mysql');
var pool = mysql.createPool({opts});
pool.query('select 1+1', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
如果我使用第二个选项,是否意味着连接会自动从池中拉出、使用和释放?如果是这样,是否有理由使用第一种方法?
最佳答案
是的,第二个意味着池负责获取下一个空闲连接,对其进行查询,然后再次释放它。您可以将它用于没有依赖关系的“一次性” 查询。
如果你想做多个相互依赖的查询,你可以使用第一个。一个连接拥有特定的状态,比如锁、事务、编码、时区、变量……。
这里是一个改变使用的时区的例子:
pool.getConnection(function(err, conn) {
function setTimezone() {
// set the timezone for the this connection
conn.query("SET time_zone='+02:00'", queryData);
}
function queryData() {
conn.query( /* some query */, queryData);
}
function restoreTimezoneToUTC() {
// restore the timezone to UTC (or what ever you use as default)
// otherwise this one connection would use +02 for future request
// if it is reused in a future `getConnection`
conn.query("SET time_zone='+00:00'", releseQuery);
}
function releaseQuery() {
// return the query back to the pool
conn.release()
}
setTimezone();
});
关于mysql - NodeJS + mysql - 自动关闭池连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358562/