Flyway и Spring Загрузка интеграции
Я пытаюсь интегрировать Flyway для миграции в проекте загрузки Spring с Hibernate и Spring JPA. Я получаю следующее исключение:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' 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 "PUBLIC" without metadata table! Use init() or set initOnMigrate to true to initialize the metadata table.
Мой pom.xml выглядит так:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>3.2</version>
</dependency>
Я использую Hibernate и конфигурационный java файл для postgres (dev stage) и h2 (local). Подписи выглядят так:
@Bean(initMethod = "migrate")
public Flyway flyway() {
Flyway fly = new Flyway();
fly.clean();
fly.init();
//flyway.setInitOnMigrate(true);
fly.setSchemas("SBA_DIALOG");
//flyway.setLocations("filesystem:src/main/resources/db/migration");
fly.setDataSource(this.dataSource());
fly.migrate();
return fly;
}
@Bean(name = "sbaEntityManagerFactory") @DependsOn("flyway")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
...
Я не могу найти ничего о моей проблеме, описанной в этом вопросе.
Может ли кто-нибудь помочь?
Ответы
Ответ 1
Spring -Boot способен на это сделать.
Просто добавьте пролет в зависимости от вашего проекта и spring -boot заберет его.
Миграция пролетного пути начнется с момента запуска службы.
Если у вас уже есть несколько таблиц в базе данных, добавьте:
flyway.baseline-on-migrate=true
в вашем файле свойств, чтобы сохранить пролетный путь, когда он обнаруживает, что некоторые таблицы уже существуют.; -)
Flyway должен забрать ваш источник данных. Если вам нужен, например, другой пользователь или что-то подобное для пролета, вы можете установить следующие свойства:
flyway.url: jdbc:postgresql://${db.host}/${db.name}
flyway.user: MYUSER
flyway.password: MYPWD
(Конечно, добавьте свои значения! Вы можете использовать SPEL для ссылки на другие свойства)
Обновление
Одно предостережение: если вы используете кластерную базу данных, вы можете столкнуться с проблемами, которые одновременно запускают несколько экземпляров, которые одновременно запускают обновления. Это проблема, когда блокировки таблицы не работают, что случилось со мной, используя кластерный mariaDB.