Spring 如果数据库已经存在,如何禁用加载schema.sql?

Spring 如果数据库已经存在,如何禁用加载schema.sql?,spring,hibernate,spring-boot,jpa,h2,Spring,Hibernate,Spring Boot,Jpa,H2,我使用存储在文件中的H2数据库和schema.sql脚本来初始化数据库(在Spring中使用DatabasePopulator类)。它可以工作,但每次应用程序启动(建立连接)时都会导入schema.sql 我的目标是仅在创建数据库后加载它。如果已建立到现有数据库的连接,我想跳过它 根据我所读到的: H2提供了一种在JDBCURL中使用RUNSCRIPT初始化数据库的方法(每次加载,而不是我想要的) Spring Data JPA和Hibernate允许通过自动生成DDL(不是我想要的,我必须使

我使用存储在文件中的H2数据库和schema.sql脚本来初始化数据库(在Spring中使用DatabasePopulator类)。它可以工作,但每次应用程序启动(建立连接)时都会导入schema.sql

我的目标是仅在创建数据库后加载它。如果已建立到现有数据库的连接,我想跳过它

根据我所读到的:

  • H2提供了一种在JDBCURL中使用RUNSCRIPT初始化数据库的方法(每次加载,而不是我想要的)
  • Spring Data JPA和Hibernate允许通过自动生成DDL(不是我想要的,我必须使用schema.sql)或加载schema.sql来初始化数据库,但只有当Spring.JPA.Hibernate.DDL-auto属性设置为create或create drop时,该属性才起作用,这也不是我想要的,因为我在一个文件中有一个数据库,所以不能在每次应用程序启动时删除它

因此,我的问题是:如何仅在创建数据库时加载schema.sql,而不手动检查数据库是否存在?甚至有可能吗?

您可以使用spring boot的
spring.datasource。在出现错误时继续(例如schema.sql执行失败,因为已经存在一个表)-或者使用迁移工具,如flyway或liquibase。问题是,schema.sql还包含drop table if exists语句(别问我为什么,我最近参加了这个项目:P)所以
spring.datasource.continue on error
也是不可能的。很遗憾,目前我正在手动检查数据库是否存在,如果存在,我不会启动populator。它可以工作,但我想知道是否有更干净的方法。我也不能使用任何迁移工具。谢谢你的评论!