Spring 每次启动 Web 应用程序时,使用 H2 启动都是 运行 data.sql,这正常吗?
Spring Boot with H2 is running data.sql every time the web app starts, is this normal?
我有一个 Spring 带有嵌入式 H2 数据库的启动应用程序(配置为将数据库保存到磁盘)。
我有一个 SQL 文件 data.sql
创建一个 users
table 如果它不存在,并在users
table.
应用程序启动时 data.sql
会自动 运行,一切正常。
问题是,它 运行s data.sql
每次应用程序启动时,它都会在 users
table 中创建另一个 admin
记录。
问题:如何配置它,以便在数据库尚不存在时仅 运行s data.sql
?
我在 application.properties
文件中的设置如下所示,因此数据将保存到磁盘,并且 运行 data.sql
文件创建数据库 ...
spring.datasource.url=jdbc:h2:file:./data/myapplication-1.0
spring.jpa.hibernate.ddl-auto=update
Spring Boot with H2 is running data.sql every time the web app starts, is this normal?
是的! 这是预期的行为。 H2 被设计为如果存在任何 data.sql
文件,则每次加载数据。因为 H2 是一个内存数据库,并且预计程序退出后数据不会持久存在。这就是每次都会加载数据的原因。如果你想要一些定制,你需要以编程方式检查它,或者逻辑应该存在(如果值存在则更新否则插入)在 data.sql
文件中。
也有简单的方法,在数据初始化后,设置一个新的配置值,这样数据就不会从data.sql
文件中加载。
您可以使用 属性 spring.datasource.initialization-mode=never
来停止每次加载数据库。
我有一个 Spring 带有嵌入式 H2 数据库的启动应用程序(配置为将数据库保存到磁盘)。
我有一个 SQL 文件 data.sql
创建一个 users
table 如果它不存在,并在users
table.
应用程序启动时 data.sql
会自动 运行,一切正常。
问题是,它 运行s data.sql
每次应用程序启动时,它都会在 users
table 中创建另一个 admin
记录。
问题:如何配置它,以便在数据库尚不存在时仅 运行s data.sql
?
我在 application.properties
文件中的设置如下所示,因此数据将保存到磁盘,并且 运行 data.sql
文件创建数据库 ...
spring.datasource.url=jdbc:h2:file:./data/myapplication-1.0
spring.jpa.hibernate.ddl-auto=update
Spring Boot with H2 is running data.sql every time the web app starts, is this normal?
是的! 这是预期的行为。 H2 被设计为如果存在任何 data.sql
文件,则每次加载数据。因为 H2 是一个内存数据库,并且预计程序退出后数据不会持久存在。这就是每次都会加载数据的原因。如果你想要一些定制,你需要以编程方式检查它,或者逻辑应该存在(如果值存在则更新否则插入)在 data.sql
文件中。
也有简单的方法,在数据初始化后,设置一个新的配置值,这样数据就不会从data.sql
文件中加载。
您可以使用 属性 spring.datasource.initialization-mode=never
来停止每次加载数据库。