我有一个 Web 应用程序,它使用 Hibernate 作为 JPA 提供程序来访问 MySQL。虽然在我的开发平台上一切正常,但是一旦我将 WAR 部署到我的服务器,就会出现以下错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
开发机器运行 Ubuntu 10.10,服务器运行 10.04;两者都使用提供的 MySQL 包和 Apache(不是 Ubuntu)的 tomcat6。我已多次检查数据库是否正在运行、凭证是否正确以及驱动程序是否可用。
我在 tomcat 的 context.xml 中有此资源定义:
<Resource
name="jdbc/phenome_repository"
auth="Container"
type="javax.sql.DataSource"
username="correctUserName"
password="correctPassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/correctDatabaseName"
/>
由于 Web 应用程序在本地运行,因此我相信其配置是正确的(其 web.xml 中有一个资源引用)。至于 MySQL,它配置为监听 127.0.0.1,并且上面的“correctUser”具有所有必要的权限(在 localhost 上)和127.0.0.1)。
有人知道“无法打开连接”的一些不常见原因吗?
答案1
就我的情况而言,结果发现另一个管理员拒绝了ALL: ALL
登录hosts.deny
,并且hosts.allow
登录信息为空。输入mysqld: 127.0.0.1
登录信息后hosts.allow
问题得到解决。
作为参考,以下是我所描述的错误的所有潜在原因:
- localhost 可能无法按要求
hosts.allow
连接hosts.deny
- JDBC 驱动程序不适用于 tomcat
- 数据库配置为不允许网络连接
- 数据库未运行
在每种情况下,完整的堆栈跟踪都会略有不同。缺少驱动程序在堆栈跟踪中比此处列出的其他原因更明显。
请建议上述列表中缺少的任何项目。