【发布时间】:2014-01-09 00:34:21
【问题描述】:
这是一种很奇怪的情况,我认为它在处理 mysql 连接对象时最常见。下面是场景
在执行 sql 语句之前,我使用 apache DBCP 连接池获得了一个连接对象。一切正常,直到发生 mysql 连接超时(8 小时)。所以在这个连接池之后没有返回任何连接对象,这使得任何sql操作都等到下次重启tomcat服务器。如果没有 DBCP,我们可能会得到通信异常,表示没有发送或接收数据包。这就是我选择 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...");
我注意到 apache DBCP 使用单例模式来创建连接,因此每次我请求时都不会创建新的连接对象。如果我做错了什么,请给我一个出路并澄清我。我不适合以下解决方案
- 增加 mysql 超时时间(bcoz mysql 很常见,我认为增加不是一个好的解决方案)
- 出现问题时重新启动 tomcat 服务器(这不是一个很好的解决方案,因为我们不能一直在那里,也没有脚本...... :)
请给我一个出路。谢谢
【问题讨论】:
-
您可以分享日志中的任何异常情况?
-
我打印了这一行“从 DBCP 连接池获取连接..”,但没有打印这一行“MYSQL DB 连接创建成功...”。没有错误信息被打印出来..!!
标签: java mysql jakarta-ee jdbc database-connection