关于mysql使用poolCluster中的连接池问题
在一个项目中如果要支持两个数据库的时候,我选择了用mysql的poolCluster来管理两个数据库的连接。目前的需求是需要定时去请求数据库检测数据是否有更新。但是我在跑了9条数据之后,就不再有数据返回了,getConnection方法直接就不会执行了。我在网上找了相关的问题之后,发现如果连接一直不释放,就会有这种问题。我猜测这次的问题也是因为每次loop的时候都会建立一个新的连接,但是旧的连接还没有释放,连接数过多就造成了无法返回数据的问题。在poolCluster配置好之后,我的dao层代码改装了一下,如下:
mysqlDao.queryconnection1 = (sql,params) => {
// console.log(poolCluster);
return new Promise((resolve,reject)=>{
poolCluster.getConnection('connect1',(err,connection)=>{
if(err){
console.log(err);
}else{
console.log('connection1 is good');
connection.query(sql,[params],(err,res)=>{
if(err){
console.log("err",err);
reject(err);
}
resolve(res);
connection.release(); //连接需要释放,如果不释放会卡住不执行
});
}
});
}).catch(err=>{
throw err;
})
}
这样的话,每次resolve之后,就把连接释放,就不会造成getConnection方法的卡死导致无法返回数据库的数据