关于mysql使用poolCluster中的连接池问题
发布于 6 年前 作者 yysmk1234 3212 次浏览 来自 分享

在一个项目中如果要支持两个数据库的时候,我选择了用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方法的卡死导致无法返回数据库的数据

回到顶部