【发布时间】:2011-02-16 19:30:04
【问题描述】:
我正面临一个令人困惑的问题。我已经完成了一个 jsf Web 应用程序,它使用 Tomcat7 和 tomcat-jdbc-pool 作为连接池提供程序来使用 hibernate 和 infinispan。
它被部署到一个有 2 个节点的 Linode 集群——一台数据库服务器和一台生产服务器。
我可以使用完全相同的 Tomcat7 副本在我的本地环境中运行该应用程序(我将 tomcat 目录压缩并提升到服务器以调试此错误)——即使连接到实时数据库实例也是如此。一切正常。
当我尝试从生产服务器运行应用程序时,出现 MySQLIO 错误:
引起:java.net.ConnectException: 连接被拒绝
在我看到的日志中进一步查找:
最后一个数据包成功发送到 服务器是 1 毫秒前。这 驱动程序没有收到任何数据包 从服务器。 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通讯链路故障
我可以从 prodapp 服务器上的命令行进行连接——即使使用 tcp:
mysql -h db01 -u user -p --protocol=tcp
但它无法在 Tomcat 容器中运行。我尝试了各种各样的事情,但我真的很难过。似乎很奇怪,我可以在本地使用相同的 Tomcat7 副本连接到数据库服务器,但是当部署到生产环境时,tomcat7 的相同副本无法连接——即使我可以从该生产服务器上的命令行连接.. . 我被难住了。
非常感谢任何帮助。
编辑:在浪费了太多美好的生活之后解决了我的问题。答案是我很愚蠢。感谢所有试图提供帮助的人。我使用开发和实时模式对应用程序进行了建模,并且连接池一直在读取开发模式。真正令人困惑的是 sessionfactory 被模拟为 live 所以它实际上会到达 live 数据库并在它启动时初始化一个连接,所以我可以看到它正在连接(并在 mysql 日志中运行元数据查询),但是当它实际上去从infinispan抢连接它爆炸了。哦,好吧——至少它现在可以工作了。再次感谢。
【问题讨论】:
-
我没有(我现在会),但如果是防火墙问题,我不会在命令行上被阻止连接吗?
-
似乎不是防火墙问题。在两台服务器上都没有运行防火墙的情况下,我得到了相同的行为。我可以从 prodapp 服务器上的命令行连接,但无法从 tomcat 应用程序连接。
标签: mysql tomcat connection