Hibernate работает на локальной машине, но не работает на Heroku - PullRequest
0 голосов
/ 11 декабря 2018

, поэтому я недавно развернул свое приложение на Heroku, но при попытке добавить спящий режим в базу данных происходит сбой.Я добавил JawsDB в качестве дополнения к своему приложению heroku и подключился к нему с помощью этого hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.url">jdbc:mysql://ehc1u4pmphj917qf.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/ycm07x7z21h40k84</property>
        <property name="hibernate.connection.username">username</property>
        <property name="hibernate.default_schema">ycm07x7z21h40k84</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</property>
        <property name="hibernate.connection.CharSet">utf8</property>
        <property name="hibernate.connection.characterEncoding">utf8</property>
        <property name="hibernate.connection.useUnicode">true</property>
    </session-factory>
</hibernate-configuration>

Мой класс конфигурации Hibernate выглядит следующим образом:

public class HibernateUtils {
  private static SessionFactory sessionFactory;

  static {
    try {
      Configuration configuration = new Configuration().configure();

      configuration.addAnnotatedClass(City.class);
      ...
      configuration.addAnnotatedClass(Review.class);

      StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
              .applySettings(
                      configuration.getProperties())
              .build();

      sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    } catch (Exception ex) {
      System.out.println("----------------------");
      System.out.println(ex);
    }
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

И после этого я связываю SessionFactory как бин, и он предоставляется как зависимость, где мне это нужно.Все работает, когда я компилирую и запускаю его локально, но при развертывании в Heroku возникает следующая ошибка:

2018-12-11T18:52:35.687631+00:00 app[web.1]: ----------------------
2018-12-11T18:52:35.687723+00:00 app[web.1]: org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml]
2018-12-11T18:52:35.692621+00:00 app[web.1]: 2018-12-11 18:52:35.692  WARN 4 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'usersService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dbProfileService' defined in URL [jar:file:/app/build/libs/build_3eb7c290daa3670885240cb93ab898a5-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/squadknowhow/services/DbProfileService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'provideUsersGenericRepository' defined in class path resource [squadknowhow/configurations/AppConfig.class]: Unsatisfied dependency expressed through method 'provideUsersGenericRepository' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.hibernate.SessionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2018-12-11T18:52:35.696062+00:00 app[web.1]: 2018-12-11 18:52:35.695  INFO 4 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-12-11T18:52:36.049747+00:00 app[web.1]: 2018-12-11 18:52:36.049  WARN 4 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase       : The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
2018-12-11T18:52:36.539830+00:00 heroku[web.1]: Process exited with status 1
2018-12-11T18:52:36.557418+00:00 heroku[web.1]: State changed from starting to crashed

Я абсолютно уверен, что имя пользователя и пароль действительны.Я успешно подключился к базе данных с MySQL Workbench с этой информацией.Я подозреваю, что мне нужно дополнительно настроить Hibernate, чтобы использовать его на Heroku, но, к сожалению, я не смог найти учебник для своего случая.Если вам нужна дополнительная информация, я с радостью ее предоставлю.Если вы укажете мне правильное направление, это также будет высоко оценено.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

В основном проблема заключается в том, что Heroku не может найти файл hibernate.cfg.xml, но в то же время файл конфигурации Java нуждается в этом.Решением было настроить hibernate без файла hibernate.cfg.xml, который я нашел на этом сайте, как это сделать: https://www.concretepage.com/hibernate/configure_hibernate_without_hibernate_cfg_xml

0 голосов
/ 11 декабря 2018

Вы должны поместить свой файл cfg в src/main/resources, или вы можете указать абсолютный путь настройки файла cfg следующим образом:

configuration.configure("/*{PATH-TO-YOUR-FILE}*/hibernate.cfg.xml"); (первый лучше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...