结论明确:在MyEclipse中构建稳定的Web应用,核心在于配置一套具备超时控制与自动重试机制的数据库连接池,以抵御网络波动或MySQL临时断连导致的频繁报错。做好这一配置,线上服务的健壮性才能得到有效保障。
准备MySQL驱动与连接池依赖
首先下载 mysql-connector-java-8.0.33.jar(兼容MySQL 5.7及以上版本,包括8.x),切勿再使用5.1.x旧版驱动——因为旧版驱动不支持autoReconnect参数。将JAR文件复制到两个指定位置:MyEclipse安装目录下的 Tomcat/lib 以及当前Web项目的 WebRoot/WEB-INF/lib。如果只放置在一处,运行时将直接抛出ClassNotFoundException,毫无例外。
若选用c3p0连接池,还需额外下载 c3p0-0.9.5.5.jar 和 mchange-commons-java-0.2.15.jar,一并放入项目的lib目录。

配置context.xml启用连接池与重试逻辑
在项目根目录下创建 META-INF/context.xml 文件(请务必注意:不是WEB-INF目录!如果放错位置,Tomcat会直接忽略,导致配置无效)。
填入以下配置,重点关注url参数中的重试逻辑与连接池超时设置:
maxReconnects=3&initialTimeout=2 是重试机制的核心配置:首次连接失败后,驱动将最多重试3次,每次间隔2秒。而 testWhileIdle + validationQuery 组合则负责定期检测空闲连接,自动剔除失效连接,避免应用获取到“假活”连接导致卡死。
声明数据源引用到web.xml
打开 WebRoot/WEB-INF/web.xml,在 标签下添加以下内容:
jdbc/myapp javax.sql.DataSource Container Shareable
res-ref-name 必须与 context.xml 中 Resource 的 name 完全一致,注意大小写敏感,任何拼写错误都会导致lookup时报错,无法找到资源。
Java代码中获取连接并验证超时行为
编写一个测试Servlet,在doGet方法中执行以下操作:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myapp");
Connection conn = ds.getConnection();
假设MySQL服务此时已经停止,Tomcat将在 maxWait(15000ms)内反复尝试获取连接,超时后直接抛出SQLException;如果MySQL中途断开连接,后续的 getConnection() 调用会自动触发重试逻辑——无需手动处理重连异常。
使用完连接后务必调用 conn.close():该方法并不会真正关闭物理连接,而是将连接归还给连接池。若不执行此操作,连接数将持续增长直至耗尽,线上生产事故往往由此引发。
