为什么我的 Spring Boot 应用程序每次启动时我的 h2 数据库都是空的?

Why is my h2 database empty every time my Spring Boot application starts?

我在具有 spring-boot-starter-data-jpa 依赖项的 Maven 项目中使用 spring 引导。

在我的 application.yml 文件中我有:

spring.datasource.url: jdbc:h2:./data;DB_CLOSE_ON_EXIT=FALSE

我还有一个 DataPopulation class:

if (userRepository.findAll().iterator().hasNext()) {
  // Database already has users..
}

其中 userRepository 是一个 CrudRepository 实例。

每次启动 userRepository returns 都没有用户,无论上次应用程序添加了多少 运行。

我可以看到 data.mv.db 和 data.trace.db 文件已创建且不为空。

为什么我的数据库在启动时总是空的?我错过了什么?

您需要以这种形式声明 url:

jdbc:h2:file:<dbpath>

例子

jdbc:h2:file:/opt/db/mydb

保存您的数据。

./data 路径让我觉得每次构建应用程序时数据库都会被删除,因为 . 表示当前目录。因此,您可以使用与您的用户主文件夹相关的数据库文件,由 ~: ~/data 表示。您可能还想在 JDBC URL:

中使用 :file
spring.datasource.url: jdbc:h2:file:~/data;DB_CLOSE_ON_EXIT=FALSE

如有需要,请查看 H2 features documentation

我的 jdbc 字符串没有错。 Spring 引导使用 'create-drop' 作为默认的休眠 ddl-auto 值。

我通过添加解决了这个问题:

spring.jpa.hibernate.ddl-自动=更新

到我的属性。