Spring-Boot仅在一个配置文件中执行data.sql

ely*_*sch 14 java spring hibernate jpa spring-boot

我有这个应用程序使用配置文件"默认"它连接到PostgreSQL数据库并使用Flyway进行迁移.

我想创建另一个名为"devEmbeddedCreate"的配置文件,我需要使用嵌入式数据库服务器(h2),spring.jpa.hibernate.ddl-auto=create-dropapplication.properties文件中创建数据库并执行一个不同的"data.sql"脚本来初始化一些表.

如果我将脚本保留为"data.sql"文件名,则每次应用程序启动时都会执行该文件.这是我不想发生的事情,我需要它只在某个特定的配置文件中执行.

我试过的事情:

  1. 文档提到可以有一个schema-${platform}.sql文件,您可以spring.datasource.platform在配置中定义平台.它不适用于data-${platform}.sql文件的问题.(这里)

  2. 创建了一个EmbeddedDatabaseBuilder.问题是当我使用它时,它不会自动创建数据库并仅应用指定的脚本.无法找到自动创建数据库的方法spring.jpa.hibernate.ddl-auto=create-drop.(这里这里)

  3. 寻找一种将XML配置转换为基于Java的配置的方法,找到了一种创建数据库的方法.经过大量的调整和更改在内存中工作后,它看起来很有前景,但是在启动时(这里)无法找出数据库为什么关闭(并擦除其所有结构)

必须有一种更简单的方法来说出"嘿春天...... data-devEmbeddedCreate.sql当我的个人资料出现时,运行strartup这个脚本devEmbeddedCreate,对吗?

kry*_*ger 14

您使用方法1)走在正确的轨道上,但是您应该通过spring.datasource.platform而不是设置数据源平台spring.jpa.database-platform.脚本执行功能不是JPA特定的.

您还可以通过设置spring.datasource.schema属性手动指定执行哪些SQL脚本文件.这是1.0.2.RELEASE中的org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration文件的摘录:

String schema = this.datasourceProperties.getProperty("schema");
if (schema == null) {
    schema = "classpath*:schema-"
            + this.datasourceProperties.getProperty("platform", "all")
            + ".sql,classpath*:schema.sql,classpath*:data.sql";
}
Run Code Online (Sandbox Code Playgroud)

如您所见,只有在未指定自己的列表时才会使用文档中指定的文件集.