为什么H2文件数据库数据每次都会被清除

She*_*men 8 h2 spring-boot

我使用 H2 数据库作为测试应用程序,使用 Spring boot。每次,当我重新启动 Spring Boot 应用程序时,H2 中的数据都会被清除。我正在使用文件而不是内存。我spring.jpa.hibernate.ddl-auto=update也在 application.properties 中设置了。这是我的 application.properties 文件

spring.datasource.url=jdbc:h2:file:./data/demo
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么。它可以很好地保存数据。但是一旦我关闭应用程序,所有数据都会被清除。

She*_*men 5

我发现了我犯的错误。我在资源中有 data.sql 文件,每次 Spring boot 启动应用程序时,它都会运行此脚本。在该脚本中,我删除并重新创建了所有表。一旦我删除了这些 sql 语句,它就完美了。数据永久保存在文件中,服务器重启后不会被删除。

  • 我认为你没有找到正确的错误。对我来说,我没有使用 data.sql 删除和创建表,但我的数据仍然丢失。添加 ```DB_CLOSE_ON_EXIT=FALSE``` 有助于即使在关闭应用程序后也保留数据 (2认同)

Pat*_*mil 0

默认情况下,关闭最后一个数据库连接将关闭数据库。对于内存数据库来说,这意味着内容丢失。要保持数据库打开,请添加 ; DB_CLOSE_DELAY=-1到数据库 URL。要在虚拟机处于活动状态时保留内存数据库的内容,请使用jdbc:h2:mem:test;DB_CLOSE_DELAY=-1.;DB_CLOSE_ON_EXIT=FALSE;

H2特性文档

  • 您可以将其写入文件,因此数据将持久存在。这就是我有这条线的原因。spring.datasource.url=jdbc:h2:文件:./data/demo (2认同)