记录一次Communications link failure due to underlying exception connect异常定位

长时间未启动项目,再次启动的时候报错:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection timed out: connect

STACKTRACE:

java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:244)
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:173)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:267)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2739)
        at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
        at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getLogWriter(BasicDataSource.java:1098)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:350)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:156)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:830)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
        at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1103)
        at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:682)
        at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:271)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5416)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)


** END NESTED EXCEPTION **

看配置文件,用客户端连接都是okay的,说明1、服务没起2、有防火墙3、用户名密码错误等都不是原因,再仔细看报错的是tomcat.dbcp的报错,而我的用的连接池是spring的,那为啥会报tomcat的dbcp错呢,回头再看tomcat中的server配置,发现在context.xml中配置了<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" initialSize="1" logAbandoned="true" maxActive="80" maxIdle="20" maxWait="10000" minIdle="1" name="jdbc/mysql5" password="bbb" removeAbandoned="true" removeAbandonedTimeout="180" testOnBorrow="true" type="javax.sql.DataSource" url="jdbc:mysql://1.1.1.1:3306/scan?characterEncoding=utf-8" username="aaa" validationQuery="select 1"/> 这么一行配置,原来tomcat启动的时候会优先读自己的配置文件,发现里面有数据库的配置,则创建tomcat.dbcp类型的连接池,而这个配置的网络不通,导致了timed out错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`com.mysql.jdbc.CommunicationsException`是MySQL JDBC驱动程序中的一个异常,它表示在尝试连接到MySQL数据库时出现通信故障。这个异常通常是由于以下原因之一引起的: 1. 数据库服务器已关闭或未启动。 2. 数据库服务器上的端口号不正确。 3. 防火墙或其他网络设备阻止了连接。 4. 数据库服务器上的连接数已达到最大值。 要解决这个问题,可以尝试以下几个步骤: 1. 确保MySQL服务器正在运行,并且端口号正确。 2. 检查防火墙或其他网络设备是否阻止了连接。 3. 检查MySQL服务器的日志文件以获取更多信息。 4. 如果连接数已达到最大值,请增加MySQL服务器上的最大连接数。 以下是一个示例代码,可以用来连接MySQL数据库并捕获`com.mysql.jdbc.CommunicationsException`异常: ```java import java.sql.*; public class Example { public static void main(String[] args) { try { // 连接到MySQL数据库 String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password); // 执行SQL查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); // 处理查询结果 while (rs.next()) { System.out.println(rs.getString("column1")); } // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { // 捕获CommunicationsException异常 if (e instanceof CommunicationsException) { System.out.println("通信故障:" + e.getMessage()); } else { e.printStackTrace(); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值