Я пытаюсь настроить проезд с помощью kotlin Spring boot, 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 и спящего режима работает должным образом. Однако пример миграции в пустой базе данных приводит к:
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
У меня есть только одна миграция, которая является котлинизированной версией примера миграции, найденной здесь, которую я адаптировал, чтобы выглядеть так:
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 продолжает жаловаться на то, что обнаруживает непустые схемы "общедоступными" без таблицы истории схем, когда база данных полностью пуста (чистый образ докера)?




Предполагая, что вы используете Spring-boot версии 2.
В весенней загрузке 2 используется префикс spring.flyway, поэтому попробуйте добавить префикс spring, как показано ниже.
spring.flyway.baseline-on-migrate = true
ИЛИ
spring.flyway.baselineOnMigrate = true
может быть можно попробовать mvn flyway:clean && mvn flyway:migrate
+1. Это также можно сделать с помощью переменных среды
FLYWAY_BASELINE_ON_MIGRATE=true. См. flywaydb.org/documentation/configuration/parameters/….