2.x + Flyway primavera de arranque para el error secuencias de comandos específicos del proveedor: encontrado más de una migración con la versión 1.x

RichardK:

Estoy intentando configurar la vía de migración para trabajar con dos proveedores - uno (H2) es para el medio ambiente local, y otro (MySQL) se da al CI.

Aquí está mi parche de secuencias de comandos:

parche

Mi configuración de la vía de migración de frijol:

@Bean(initMethod = "migrate")
    Flyway flyway() {
        Flyway flyway = Flyway
                .configure()
                .dataSource(dataSource(dataSourceProperties()))
                .locations("classpath:db/migration/MySQL", "classpath:db/migration/H2")
                .load();
        return flyway;
    }

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("spring.datasource")
    public HikariDataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(HikariDataSource.class)
                .build();
    }

Y la configuración de mi application.yml:

spring:
  main:
    allow-bean-definition-overriding: true
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://localhost:3306/messages
    username: username
    password: password

Lo que trato de lograr es hacer que los scripts de base de datos de proveedores específicos dirigidos ruta de vuelo, dependiendo de qué base de datos se encuentra en el origen de datos. Esto es lo que sale:

Caused by: org.flywaydb.core.api.FlywayException: Found more than one migration with version 1.1
Offenders:
-> C:\Projects\my-project\out\production\resources\db\specific\MySQL\V1_1__Create_table_message.sql (SQL)
-> C:\Projects\my-project\out\production\resources\db\specific\H2\V1_1__Create_table_message.sql (SQL)

Ya lo he intentado utilizar nombres de proveedores minúsculas (db / migración / MySQL ...) y el uso db / específico / en lugar de db / migración. Nada funcionó para mí.

Marcos Rotteveel:

El problema es el consumo de:

.locations("classpath:db/migration/MySQL", "classpath:db/migration/H2")

Esto añadirá dos migraciones a la ruta en tiempo de ejecución. Esto es lo que causa el problema, porque Esto indica a la vía de migración de configuración para utilizar siempre los guiones de ambos lugares, en lugar de sólo utilizar los guiones para H2 H2 y las secuencias de comandos de MySQL para MySQL.

En su lugar, sólo se debe agregar la ruta específica para el conductor activa en el camino.

Algo como

String driverVendor = ..; // something to decide h2 or mysql
Flyway flyway = Flyway
        .configure()
        .locations("classpath:db/migration/" + driverVendor)

Es posible que necesite a minúsculas los nombres de las carpetas, es decir H2a h2y MySQLque mysqlpara que esto funcione.

Alternativamente, considerar el uso de primavera Boots Flyway auto-configuración en lugar de codificar la configuración Flyway en el código. Esto le permite definir la ruta en la configuración de aplicaciones como:

spring.flyway.locations=classpath:db/migration/{vendor}

Cuando {vendor}se rellena automáticamente con el nombre del proveedor del conductor utilizado para conectar.

Ver también Ejecutar la ruta migratoria Las migraciones de bases de datos al iniciar

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225442&siteId=1
Recomendado
Clasificación