Spring boot 每次web应用启动时,Spring Boot with H2都在运行data.sql,这正常吗?

Spring boot 每次web应用启动时,Spring Boot with H2都在运行data.sql,这正常吗?,spring-boot,h2,Spring Boot,H2,我有一个带有嵌入式H2数据库的Spring启动应用程序(配置为将数据库保存到磁盘) 我有一个SQL文件data.SQL,如果它不存在,它会创建一个users表,并在users表中插入一个admin帐户 应用程序启动时,data.sql会自动运行,一切正常 问题是,每次应用程序启动时,它都会运行data.sql,并在users表中创建另一条admin记录 问题:如何配置它,使其仅在数据库尚不存在时运行data.sql 我在application.properties文件中的设置如下所示,因此数据将

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

我有一个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
每次web应用启动时,Spring Boot with H2都在运行data.sql,这正常吗

是的这是预期的行为。H2设计用于在每次存在任何
data.sql
文件时加载数据。因为H2是一个内存数据库,并且预期在程序退出后数据不会持久化。这就是为什么每次都会加载数据。如果您想要一些定制,您需要以编程方式检查它,或者在
data.sql
文件中存在逻辑(如果值存在,则更新else insert)

还有一种简单的方法,在数据初始化之后,您可以设置一个新的配置值,这样数据就不会从
data.sql
文件加载

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

参考: