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";
}
Как вы можете видеть, набор файлов, указанных в документации, используется только в том случае, если вы не указали свой собственный список.