2013-06-20 83 views
1

我为我的SpringMVC + Maven + Hibernate + MySQL应用程序生成了一个.war文件,该应用程序在本地主机和本地MySQL数据库上工作得非常好。我配置数据库的方式是通过WebAppConfig.java文件来查看application.properties文件并检索相应的信息。OpenShift应用程序无法连接到MySQL:JDBCConnectionException:无法打开连接

然后,我创建了一个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值不是那些占位符!

回答

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}

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

+0

感谢您的回复,我一定会在我原来的文章中添加application.properties文件!我还确保mysql盒式磁带实际上已启动并正在运行。 – user1395446

+0

感谢您添加应用程序属性。请不要使用root/pass;而是使用添加mysql盒式磁带时提供给您的信息,或者您可以使用环境变量:OPENSHIFT_MYSQL_DB_USERNAME/OPENSHIFT_MYSQL_DB_PASSWORD –

+0

对不起,我应该已经更清楚了,在我的代码中,我确实使用通过openshift提供的内容,而不是根/过关!我只是不想在这里张贴传递我猜:) – user1395446

0

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

您是否检查过PHPMyAdmin以确保MYSQL已启动并拥有您期望的数据库和表格并验证您的所有SQL。

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

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

+0

是的,你是对的我其实错过了,我添加了一个答案,最终为我工作!您是否将Ehcache添加到OpenStack应用程序中? – user1395446

0

我不明白为什么openshift强制我们使用它们的环境变量而不是使用“localhost:3306”和用户名/密码的实际值。这使我们很不方便。另外,在我的application-context.xml中添加这行代码jdbc:mysql:// $ {OPENSHIFT_DB_HOST}:$ {OPENSHIFT_DB_PORT}/$ {OPENSHIFT_APP_NAME}

由于spring无法识别这些值,所以得到一个编译错误。