Spring -Boot выполнить data.sql только в одном профиле

У меня есть это приложение, в котором с использованием профиля "по умолчанию" он подключается к базе данных PostgreSQL и выполняет миграцию с помощью Flyway.

Я хочу создать еще один профиль под названием "devEmbeddedCreate", где мне нужно использовать встроенный сервер базы данных (h2), создать базу данных с помощью spring.jpa.hibernate.ddl-auto=create-drop в файле application.properties и выполнить иначе называемый "data.sql" script для инициализации некоторых таблиц.

Если я оставляю script с именем файла data.sql, он запускается каждый раз при запуске приложения. Это то, чего я не хочу, мне нужно, чтобы он исполнялся только в определенном профиле.

Вещи, которые я пробовал:

  • В документации упоминается файл schema-${platform}.sql, и вы можете определить платформу с помощью spring.datasource.platform в конфигурации. Проблема в том, что он не работает с файлом data-${platform}.sql. (здесь)

  • Создан EmbeddedDatabaseBuilder. Проблема в том, что я использую его, он не создает автоматически базу данных и применяет только указанный script. Не удалось найти способ создания базы данных автоматически, как это делает spring.jpa.hibernate.ddl-auto=create-drop. (здесь и здесь)

  • Поиск способа преобразования конфигурации XML в конфигурацию на основе Java нашел способ создания базы данных и всего. После многократной настройки и перехода на работу в память, он выглядел многообещающим, но не смог выяснить, почему база данных закрывается (и стирает всю ее структуру) при запуске (здесь)

Должен быть более простой способ просто сказать: "hey spring... запустите strartup this data-devEmbeddedCreate.sql script, когда мой профиль devEmbeddedCreate, правильно?

Ответ 1

Вы были на правильном пути с вашим подходом 1), но вы должны установить платформу datasource с помощью spring.datasource.platform, а не spring.jpa.database-platform. Функциональность выполнения script не зависит от JPA.

Вы также можете вручную указать, какие файлы SQL script выполняются, установив свойство spring.datasource.schema. Это выдержка из org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration файла в 1.0.2.RELEASE:

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

Как вы можете видеть, набор файлов, указанных в документации, используется только в том случае, если вы не указали свой собственный список.