Подтвердить что ты не робот

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() {
...

Я не могу найти ничего о моей проблеме, описанной в этом вопросе. Может ли кто-нибудь помочь?

4b9b3361

Ответ 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.