【问题标题】:OpenShift app can't connect to MySQL : JDBCConnectionException: Could not open connectionOpenShift 应用程序无法连接到 MySQL:JDBCConnectionException:无法打开连接
【发布时间】:2013-06-16 18:27:46
【问题描述】:

我为我的 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 值,而不是那些占位符!

【问题讨论】:

    标签: mysql spring hibernate openshift


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,我一定会在我的原帖中添加application.properties文件!我还确保 mysql 墨盒实际上已启动并正在运行。
    • 感谢您添加应用程序属性。请不要使用root/pass;而是使用添加 mysql 墨盒时提供给您的信息,或者您可以使用环境变量:OPENSHIFT_MYSQL_DB_USERNAME/OPENSHIFT_MYSQL_DB_PASSWORD
    • 对不起,我应该更清楚,在我的代码中,我确实使用了通过 openshift 提供的内容,而不是 root/pass!我想我只是不想在这里发布通行证:)
    【解决方案2】:

    也感谢您在我们的论坛发帖:
    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 = 根 db.password = 通过

    【讨论】:

    • 对不起,我应该在我的原始帖子中指出这一点。我正在使用 openshift 提供给我的内容,我将更新 OP!
    【解决方案3】:

    我忘了实际回答这个问题。

    我只是想再次澄清一下,使用“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}

    【讨论】:

      【解决方案4】:

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

      您是否检查过 PHPMyAdmin 以确保 MYSQL 具有您期望的数据库和表并验证您的所有 sql。

      WebAppConfig 是否有正确的 Spring 注解?它是否完全没有错误地构建?你的单元测试有效吗?是否已建立所有 maven 依赖项和版本?

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

      【讨论】:

      • 是的,你说得对,我实际上错过了这一点,我添加了一个最终为我工作的答案!您是否将 Ehcache 添加到 OpenStack 应用程序中?
      【解决方案5】:

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

      在我的 application-context.xml 中出现编译错误,因为 spring 无法识别这些值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-27
        • 1970-01-01
        • 2014-04-24
        • 2011-09-18
        • 1970-01-01
        • 2018-08-19
        • 2014-04-04
        相关资源
        最近更新 更多