OpenShift应用程序无法连接到MySQL:JDBCConnectionException:无法打开连接

时间:2013-06-20 02:42:37

标签: mysql spring hibernate openshift

我为我的SpringMVC + Maven + Hibernate + MySQL应用程序生成了一个.war文件,该文件在localhost和本地MySQL数据库上运行得非常好。我配置数据库的方式是通过WebAppConfig.java文件查看application.properties文件并检索相应的信息。

然后我创建了一个OpenShift帐户并部署了该.war文件。我添加了MySQL和PHPMyAdmin墨盒,因此我可以维护一个数据库。当我尝试通过我的应用程序检索信息或推送到数据库时,我收到此错误。

  

HTTP状态500 - 请求处理失败;嵌套异常是org.springframework.transaction.CannotCreateTransactionException:无法打开Hibernate Session进行事务处理;嵌套异常是org.hibernate.exception.JDBCConnectionException:无法打开连接

     

消息请求处理失败;嵌套异常是org.springframework.transaction.CannotCreateTransactionException:无法打开Hibernate Session进行事务处理;嵌套异常是org.hibernate.exception.JDBCConnectionException:无法打开连接

     

异常 org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.transaction.CannotCreateTransactionException:无法打开Hibernate Session进行事务处理;嵌套异常是org.hibernate.exception.JDBCConnectionException:无法打开连接       org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)       org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)       javax.servlet.http.HttpServlet.service(HttpServlet.java:641)       org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)       javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

我已经在我的属性文件中添加了我的数据库的相应信息,所以我认为这不是问题。

application.properties

#DB
db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://{OPENSHIFT_MYSQL_DB_HOST}:{OPENSHIFT_MYSQL_DB_PORT}/springmvc
db.username = {OPENSHIFT_MYSQL_DB_USERNAME}
db.password = {OPENSHIFT_MYSQL_DB_PASSWORD}

#Hibernate
hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql = true
entitymanager.packages.to.scan = org.example.app.model
hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider

注意:在我的实际代码中,我有实际的OPENSHIFT_MYSQL_DB_HOST和OPENSHIFT_MYSQL_DB_PORT值而不是那些占位符!

5 个答案:

答案 0 :(得分:1)

我忘了回答这个问题。

我只想再次澄清一下,使用'OPENSHIFT'变量而不是将ACUTAL值放在application.properties中修复了这个问题。

  

db.url = jdbc:mysql:// $ {OPENSHIFT_DB_HOST}:$ {OPENSHIFT_DB_PORT} / $ {OPENSHIFT_APP_NAME}

     

db.username = $ {OPENSHIFT_MYSQL_DB_USERNAME}

     

db.password = $ {OPENSHIFT_MYSQL_DB_PASSWORD}

答案 1 :(得分:0)

确保mysql盒已启动并运行;如果需要尝试重新启动它。否则,请发布您的属性文件。另请阅读以下主题,可能会有所帮助:

https://www.openshift.com/forums/openshift/hibernate-mysql-connection-failing https://www.openshift.com/forums/openshift/mysql-db-stops-responding-after-some-time

答案 2 :(得分:0)

感谢您发布到我们的论坛:
https://www.openshift.com/forums/openshift/openshift-app-cant-connect-to-mysql-jdbcconnectionexception-could-not-open

看起来你想要使用:
db.username = {OPENSHIFT_MYSQL_DB_USERNAME} db.password = {OPENSHIFT_MYSQL_DB_PASSWORD}

代替: db.username = root db.password =传递

答案 3 :(得分:0)

在变量名中缺少$,你也可以很容易地在本地运行它,以确保它只是mysql变量而不是编码错误。

您是否已检查过PHPMyAdmin以确保MYSQL已启用您希望的数据库和表格并验证您的所有sql。

WebAppConfig是否有适当的Spring注释?它是否完全没有错误地构建?你的单元测试工作吗?您是否已建立所有maven依赖项和版本?

这对我在所有可用的Java服务器类型上使用OpenStack都有用。

答案 4 :(得分:0)

我不明白为什么openshift强制我们使用他们的环境变量而不是使用“localhost:3306”和用户名/密码的实际值。这让我们非常不方便。另外,添加以下代码行jdbc:mysql:// $ {OPENSHIFT_DB_HOST}:$ {OPENSHIFT_DB_PORT} / $ {OPENSHIFT_APP_NAME}

我的application-context.xml中的

获取了编译错误,因为spring无法识别这些值。