我一直在尝试创建一个非常简单的Spring项目以与Heroku中的Postgres插件一起使用,但是我没有下面的Heroku文档中描述的任何方法都能正常工作:https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java >
我尝试的最后一件事是使用Heroku为数据库创建的环境变量来创建hibernate.cfg.xml文档。我已经花了十多个小时尝试各种方式的不同配置,例如创建BasicDataSource bean,在application.yml和application.properties中配置数据库等。我还尝试了在Heroku中使用H2数据库,我已经开始工作了。
我的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 [n / a];嵌套的异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet
我希望从/ get映射以显示最初为空的列表,而/ post则将TestObject添加到所述列表。如果您想查看我上次运行该应用程序新版本时的heroku日志,则它们位于pastebin上:https://pastebin.com/0TQys5Me
EDIT1: 具有Hibernate命令输出和堆栈跟踪的Heroku日志:https://pastebin.com/s86UdHTx