Как настроить проект Hibernate in Spring для Heroku Postgres - PullRequest
0 голосов
/ 28 марта 2019

Я пытался создать очень простой Spring-проект для работы с аддоном Postgres в Heroku, но у меня не работает ни один из методов, описанных в документации Heroku ниже: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java

Последнее, что я попробовал, - это создать документ hibernate.cfg.xml с использованием переменных среды, которые Heroku создает для базы данных.Я потратил более 10 часов, пробуя все способы различных конфигураций, таких как создание компонента BasicDataSource, настройка базы данных в application.yml и application.properties и т. Д. Я также пытался использовать базу данных H2 в Heroku, с которой я работал,

Мой hibernate.cfg.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">${JDBC_DATABASE_URL}</property>
        <property name="hibernate.connection.username">${JDBC_DATABASE_USERNAME}</property>
        <property name="hibernate.connection.password">${JDBC_DATABASE_PASSWORD}</property>
        <property name="hibernate.connection.pool_size">1</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</property>
    </session-factory>
</hibernate-configuration>

Вот мои зависимости от pom.xml:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.5</version>
        </dependency>
</dependencies>

Классы Java очень простые,но вот они;Приложение:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

Контроллер:

@RestController
public class TestController {
    @Autowired
    TestRepository repository;

    @PostMapping(name = "/add")
    public TestObject postObject(@RequestBody TestObject object) {
        return repository.save(object);
    }

    @GetMapping(name = "/get")
    public Iterable<TestObject> getFirst() {
        return repository.findAll();
    }
}

Персистируемый объект:

@Entity
@Table(name = "testobjects")
public class TestObject {
    @Id
    @GeneratedValue
    private Long id;

    private String data;

    public TestObject(String data) {
        this.data = data;
    }

    public TestObject() {
    }

    public Long getId() {
        return id;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

Наконец, мой репозиторий:

public interface TestRepository extends CrudRepository<TestObject, Long> {
}

Доступлюбая страница в приложении показывает ошибку / исключение:

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500).не удалось извлечь ResultSet;SQL [н / п];вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet

Я ожидаю, что отображение из / get отобразит изначально пустой список, и / post добавит TestObject в указанный список.Если вы хотите просмотреть журналы heroku, когда я последний раз запускал новую версию приложения, они находятся на pastebin: https://pastebin.com/0TQys5Me

EDIT1: журналы Heroku с выводом команды Hibernate и трассировкой стека: https://pastebin.com/s86UdHTx

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