Приложение OpenShift не может подключиться к MySQL: JDBCConnectionException: не удалось открыть соединение

Я создал файл .war для своего приложения SpringMVC + Maven + Hibernate + MySQL, которое отлично работало на локальном хосте и в локальной базе данных MySQL. Я настраиваю базу данных с помощью файла WebAppConfig.java, который просматривает файл application.properties и извлекает соответствующую информацию.

Затем я создал учетную запись OpenShift и развернул этот файл .war. Я добавил картриджи MySQL и PHPMyAdmin, чтобы иметь возможность поддерживать базу данных. Когда я пытаюсь получить информацию или отправить ее в базу данных через свое приложение, я получаю эту ошибку.

Состояние HTTP 500 — Ошибка обработки запроса; вложенным исключением является org.springframework.transaction.CannotCreateTransactionException: не удалось открыть сеанс Hibernate для транзакции; вложенным исключением является org.hibernate.exception.JDBCConnectionException: не удалось открыть соединение

сообщение Не удалось обработать запрос; вложенным исключением является org.springframework.transaction.CannotCreateTransactionException: не удалось открыть сеанс Hibernate для транзакции; вложенным исключением является org.hibernate.exception.JDBCConnectionException: не удалось открыть соединение

Exception 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) )

Я уже добавил соответствующую информацию для моей базы данных в свой файл свойств, поэтому я не думаю, что это проблема.

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, а не эти заполнители!


person user1395446    schedule 20.06.2013    source источник


Ответы (5)


Я забыл ответить на этот вопрос.

Я просто хочу еще раз уточнить, что использование переменных «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}

person user1395446    schedule 25.06.2013

Убедитесь, что картридж mysql запущен и работает; при необходимости попробуйте перезапустить его. В противном случае, опубликуйте свой файл свойств. Также прочитайте следующие темы, может кому пригодится:

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

person Sumana Mehta    schedule 20.06.2013
comment
Спасибо за ответ, я обязательно добавлю файл application.properties в свой исходный пост! Я также убедился, что картридж mysql действительно запущен и работает. - person user1395446; 20.06.2013
comment
Спасибо за добавление свойств приложения. Пожалуйста, не используйте root/pass; вместо этого используйте информацию, которая была предоставлена ​​вам при добавлении картриджа mysql, или вы можете использовать переменные среды: OPENSHIFT_MYSQL_DB_USERNAME/OPENSHIFT_MYSQL_DB_PASSWORD - person Sumana Mehta; 20.06.2013
comment
Извините, я должен был быть более ясным, в моем коде я использую то, что было предоставлено через openshift, а НЕ root/pass! Я просто не хотел размещать пропуск здесь, я думаю:) - person user1395446; 20.06.2013

Спасибо за публикацию на наших форумах:
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

person Nam Duong    schedule 20.06.2013
comment
Извините, я должен был отметить это в своем исходном сообщении. Я использую то, что мне предоставил openshift, я обновлю ОП! - person user1395446; 20.06.2013

Отсутствуя $ в именах переменных, вы также можете очень легко запустить его локально, чтобы убедиться, что это просто переменные mysql, а не ошибка кодирования.

Вы проверили PHPMyAdmin, чтобы убедиться, что MYSQL имеет базу данных и таблицы, которые вы ожидаете, и проверяете все ваши sql.

Имеет ли WebAppConfig правильные аннотации Spring? Собирается полностью без ошибок? Работают ли ваши модульные тесты? У вас установлены все зависимости и версии maven?

Это сработало для меня, используя OpenStack на всех доступных типах серверов Java.

person Tim Spann    schedule 25.06.2013
comment
Да, вы правы, на самом деле мне этого не хватало, и я добавил ответ, который в итоге сработал для меня! Вы добавили Ehcache в приложение OpenStack? - person user1395446; 25.06.2013

Я не понимаю, почему openshift заставляет нас использовать свои переменные среды вместо использования «localhost: 3306» и фактических значений имени пользователя/пароля. Это делает нас очень неудобными. Кроме того, добавив эту строку кода jdbc:mysql://${OPENSHIFT_DB_HOST}:${OPENSHIFT_DB_PORT}/${OPENSHIFT_APP_NAME}

в моем application-context.xml возникает ошибка компиляции, поскольку Spring не распознает эти значения.

person Warner    schedule 06.11.2013