Flyway: найдены непустые схемы "public" без таблицы истории схем! Использовать baseline () - в пустой базе данных - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь настроить flyway с загрузкой kotlin Spring, jpa и postgreSQL. Мои зависимости gradle:

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
    implementation('org.flywaydb:flyway-core')
    implementation('com.google.code.gson:gson')
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    runtimeOnly('org.postgresql:postgresql')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}

Мой файл application.properties:

spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://${JDBC_DATABASE_URL}/jpaTestDatabase
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}

flyway.baseline-on-migrate=true
flyway.locations=classpath:src/main/kotlin/db/migration

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.session.store-type=none

Создание таблиц и записей с использованием jpa и hibernate работает, как и ожидалось. Однако пример миграции на пустую базу данных приводит к:

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: 
Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: 
Found non-empty schema(s) "public" without schema history table! Use baseline() or set baselineOnMigrate to true to initialize the schema history table.

Моя структура каталогов является структурой по умолчанию, созданной Spring initializr, и мои миграции находятся в: demo/src/main/kotlin/db/migration

У меня есть только одна миграция, которая является kotlinized версией примера миграции, найденной здесь , которую я адаптировал так:

class V1__Sample : BaseJavaMigration() {
  override fun migrate(context: Context?) {
    val statement = context?.connection?.prepareStatement(
      """
        CREATE TABLE article (
          id bigserial primary key,
          name varchar(20) NOT NULL,
          desc text NOT NULL
        );
      """
    )
    statement.use { it?.execute() }
  }
}

Что мне здесь не хватает? Почему Flyway продолжает жаловаться на нахождение непустой схемы (схем) "общедоступной" без таблицы истории схемы, когда база данных полностью пуста (чистый образ докера)?

1 Ответ

0 голосов
/ 06 ноября 2018

Предполагается, что вы используете весеннюю загрузку версии 2.

В весенней загрузке 2 префикс «spring.flyway», поэтому попробуйте добавить префикс spring, как показано ниже.

spring.flyway.baseline-on-migrate = true

OR

spring.flyway.baselineOnMigrate = true

...