【问题标题】:Spring Boot with H2 is running data.sql every time the web app starts, is this normal?Spring Boot with H2 每次 web 应用启动时都会运行 data.sql,这正常吗?
【发布时间】:2020-11-22 18:27:45
【问题描述】:

我有一个带有嵌入式 H2 数据库的 Spring Boot 应用程序(配置为将数据库保存到磁盘)。

我有一个 SQL 文件 data.sql,如果它不存在,它会创建一个 users 表,并在 users 表中插入一个 admin 帐户。

data.sql 在应用启动时自动运行,一切正常。

问题是,每次应用程序启动时它都会运行data.sql,并在users 表中创建另一个admin 记录。

问题:如何配置它,使其仅在数据库尚不存在时运行data.sql

我在application.properties文件中的设置是这样的,所以数据会被保存到磁盘,然后运行data.sql文件来创建数据库...

spring.datasource.url=jdbc:h2:file:./data/myapplication-1.0
spring.jpa.hibernate.ddl-auto=update

【问题讨论】:

    标签: spring-boot h2


    【解决方案1】:

    使用 H2 的 Spring Boot 每次启动 web 应用时都会运行 data.sql,这是正常的吗?

    是的!这是预期行为。如果存在任何data.sql 文件,H2 旨在每次加载数据。因为H2是内存数据库,预计程序退出后数据不会持久化。这就是为什么每次都会加载数据的原因。如果您想要一些自定义,您需要以编程方式检查它,或者data.sql 文件中应该存在逻辑(如果值存在则更新否则插入)。

    也有简单的方法,数据初始化后,设置一个新的配置值,这样就不会从data.sql文件中加载数据了。

    您可以使用属性spring.datasource.initialization-mode=never 来停止每次加载数据库。

    参考: 79.3 Initialize a Database

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多