1

SpringMVC + Maven + Hibernate + MySQL アプリ用の .war ファイルを生成しました。これは、localhost とローカル MySQL データベースで完全に正常に動作していました。データベースを構成する方法は、application.properties ファイルを見て適切な情報を取得する WebAppConfig.java ファイルを使用することです。

次に、OpenShift アカウントを作成し、その .war ファイルをデプロイしました。データベースを維持できるように、MySQL および PHPMyAdmin カートリッジを追加しました。アプリケーションから情報を取得したり、データベースにプッシュしようとすると、このエラーが発生します。

HTTP ステータス 500 - リクエストの処理に失敗しました。ネストされた例外は org.springframework.transaction.CannotCreateTransactionException: トランザクションの Hibernate セッションを開けませんでした。ネストされた例外は org.hibernate.exception.JDBCConnectionException: 接続を開けませんでした

message要求の処理に失敗しました。ネストされた例外は org.springframework.transaction.CannotCreateTransactionException: トランザクションの Hibernate セッションを開けませんでした。ネストされた例外は org.hibernate.exception.JDBCConnectionException: 接続を開けませんでした

例外org.springframework.web.util.NestedServletException: リクエストの処理に失敗しました。ネストされた例外は org.springframework.transaction.CannotCreateTransactionException: トランザクションの Hibernate セッションを開けませんでした。ネストされた例外は org.hibernate.exception.JDBCConnectionException: 接続 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) を開けませんでした) 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) )

プロパティファイルにデータベースの適切な情報を既に追加しているので、それが問題だとは思いません。

アプリケーションのプロパティ

#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 の値があります!

4

5 に答える 5

1

私は実際にこの質問に答えるのを忘れていました。

application.propertiesにACUTAL値を入れるのではなく、「OPENSHIFT」変数を使用することで問題が解決したことをもう一度明確にしたいだけです。

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

デシベルのユーザー名 = ${OPENSHIFT_MYSQL_DB_USERNAME}

デシベルのパスワード = ${OPENSHIFT_MYSQL_DB_PASSWORD}

于 2013-06-25T04:20:30.240 に答える
0

「localhost:3306」とユーザー名/パスワードの実際の値を使用する代わりに、openshift が強制的に環境変数を使用する理由がわかりません。これは私たちを非常に不便にしています。また、次のコード行を追加します jdbc:mysql://${OPENSHIFT_DB_HOST}:${OPENSHIFT_DB_PORT}/${OPENSHIFT_APP_NAME}

私の application-context.xml では、Spring がこれらの値を認識しないため、コンパイル エラーが発生します。

于 2013-11-06T15:29:33.063 に答える
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 = pass

于 2013-06-20T18:47:34.523 に答える
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

于 2013-06-20T18:03:46.757 に答える