Не работает инициализация БД

121
05 января 2021, 07:30

Я инициализирую базу через flyway, после чего, если приложение запущено локально, мне нужно накатить скрипты с тестовыми данными. Flyway отрабатывает нормально, но с тестовыми скриптами некоторые сложности - они не работают. Проперти инициализации выглядят так:

# data source properties
# ��������� �� - ��. DatasourceConfig
database.port=5482
#spring.datasource.url=jdbc:postgresql://127.0.0.1:${database.port}}/
#spring.datasource.username=postgres
#spring.datasource.password=
spring.datasource.initialize=true
spring.datasource.character=utf-8
spring.datasource.embedded-directory = target
#spring.datasource.schema=classpath:db/migration/common/V001__schema.sql
spring.datasource.data=classpath:db/migration/dev/init.sql
# JPA properties
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL9Dialect
spring.jpa.show-sql=true
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
# migration properties
spring.flyway.enabled=true
spring.flyway.check-location=false
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=0
spring.flyway.locations=classpath:db/migration/common

По логике инициализации, должны выполниться скрипты, доступные по переменной

spring.datasource.data=classpath:db/migration/dev/init.sql

Но база пустая. Подскажите, что не так?

Answer 1

Для накатывания демо данных я использую тот же Flyway и отдельный Spring профиль (например, dev): в одной папке лежат общие скрипты (для разработки и для прода), в другой - скрипты с демо данными. Примерно так:

/db
  /migration
    /common
      V1.1__schema.sql
      V2.0__some_migration.sql
    /dev
      V1.2__demo_data.sql

Файлы настроек, общий и dev:

application.yml:

spring:
  flyway:
    enabled: true
    locations: classpath:db/migration/common

application-dev.yml:

spring:
  flyway:
    enabled: true
    locations: classpath:db/migration/common,classpath:db/migration/dev

Тут хитрый момент с версионированием файлов миграции - если указать подверсию (через точку или подчеркивание), то Flyway будет накатывать скрипты в нужном порядке независимо от каталогов, в которых они хранятся: 1.1, 1.2, 2.0 и т.д

Подробнее:

  • Execute Flyway Database Migrations on Startup
  • Versioned Migrations
  • Naming

P.S. Насчет свойства spring.datasource.data могу предположить, что Бут его не использует, если активирован Flyway.

READ ALSO
Не удаётся получить длинну VKUsersArray

Не удаётся получить длинну VKUsersArray

VKUsersArray назвал VKFЗнаю, что можно получить значение через VKF

123
Java | Хранение экземпляра класса

Java | Хранение экземпляра класса

Делаю бота для Telegram на JavaПри разработке столкнулся с тем, что система хранит где-то объект и отправляет его параметры несмотря на то, что объект...

144
Почему возникает ошибка OutOfMemoryError?

Почему возникает ошибка OutOfMemoryError?

Вводится из консоли дата (тип String)При посимвольном сравнении, на второй вводимой дате вылетает ошибка java

113