Я пытался создать очень простой 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