这是非常奇怪的情况,我认为它在处理mysql连接对象时最为常见。以下是场景无法从mysql连接超时后从apache DBCP连接池中获得连接
在执行sql语句之前,我使用apache DBCP连接池获取连接对象。一切正常,直到mysql连接超时(8小时)发生。所以在这个连接池之后没有返回任何连接对象,这使得任何sql操作都等待到下一次重新启动tomcat服务器。如果没有DBCP,我们可能会收到communicationException,表示没有发送或接收数据包。这就是我选择apache DBCP认为它会管理连接池的原因。下面是我的代码
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.apache.commons.dbcp.BasicDataSource;
DataSource dataSource
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUsername(username);
ds.setPassword(password);
ds.setUrl(url + "/" + dbname);
dataSource = ds;
logger.info("Getting connection from DBCP connection pool...");
con = dataSource.getConnection();
logger.info("MYSQL DB Connection Creation Successful...");
我注意到,阿帕奇DBCP使用Singleton模式,创作出如此新的连接对象不被创建,每次我请求连接。请告诉我一个出路,并澄清我,如果我做错了什么。我并不是为以下解决方案
- 提高MySQL的超时(bcoz MySQL的是常见的,我不认为增加将是一个很好的解决方案)
- 当出现问题时(不是一个漂亮的解决方案,重新启动Tomcat服务器我们不能总是在那里,也没有脚本...... :)
请提出我一个出路。谢谢
你可以分享的日志的任何异常? – aviad
我得到这行打印“从DBCP连接池获取连接..”但不是“MYSQL数据库连接创建成功......”。没有错误信息被打印.. !! – Vivek