Приложение весенней загрузки Flyway не применяет скрипт вставки при запуске - PullRequest
0 голосов
/ 30 января 2020

У меня есть подпружиненное приложение JPA, с которым я пытаюсь интегрировать flyway. Мое приложение запускается нормально и запускает схему создания (V1_somescript. sql) в моей локальной БД, но оно не запускает и не применяет скрипт вставки (V2_insert_script. sql). Вот как выглядит моя конфигурация:

pom. xml для пролетного пути:

 <dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>6.1.4</version>
 </dependency>

файл application.properties:

# ===============================
# JPA / HIBERNATE / FLYWAY
# ===============================

spring.jpa.hibernate.ddl-auto=update
spring.flyway.check-location=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
spring.jpa.properties.hibernate.generate_statistics=true

# ===============================
# DataSource
# ===============================
spring.flyway.locations=classpath*:resources/db/migrations
spring.datasource.url=jdbc:mysql://localhost:3306:3306/my_schema?useTimezone=true&serverTimezone=UTC
spring.datasource.username=my_username
spring.datasource.password=my_password

Вот V1_create_schema. sql script:

CREATE TABLE `lang` (
  `lang` varchar(6) NOT NULL,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Вот сценарий V2_insert_schema. sql:

INSERT IGNORE INTO `lang`(`lang`, `name`)
VALUES  ('ar-AE', 'Arabic'),
  ('cs-CZ', 'Czech'),
  ('da-DK', 'Danish'),
  ('de-DE', 'German'),
  ('el-GR', 'Greek'),
  ('en-GB', 'English (UK)'),
  ('en-US', 'English (US)');

Кроме того, вот определение компонента в моем AppConfig. java:

  @Bean
  @Profile(value = {"default", "memory"})
  public Flyway flyway(DataSourceProperties dataSourceProperties) {
    Flyway flyway =
        Flyway.configure()
            .dataSource(
                dataSourceProperties.getUrl(),
                dataSourceProperties.getUsername(),
                dataSourceProperties.getPassword())
            .baselineOnMigrate(true)
            .locations("classpath:db/migration")
            .load();
    return flyway;
  }

Я не получаю никакой ошибки при запуске приложения в моей IDE. Я удалил схему и создал схему перед запуском приложения и увидел, что приложение запустилось нормально и применил схему создания, но в таблице lang не было записей.

Также журналы приложения, кажется, предполагают, что оно, возможно, не применило миграцию V1_create_schema. sql по пролетному пути, и вместо этого это должно быть сделано hibernate. Кто-нибудь знает, чего мне здесь не хватает?

1 Ответ

1 голос
/ 30 января 2020

похоже, что Hibernate создает модель данных для вас (spring.jpa.hibernate.ddl-auto=update), которую вы можете отключить, поскольку вы используете Flyway.

В любом случае при использовании Flyway в существующей непустой схеме вы хотите

spring.flyway.baseline-on-migrate = true

, чтобы убедиться, что таблица Flyway History создается при первом запуске.

...