为什么我的 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-自动=更新
到我的属性。
我在具有 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-自动=更新
到我的属性。