2016-05-26 13 views
13

Non capisco cosa dovrei fare quando una migrazione fallisce usando Flyway in un progetto Spring Boot.Flyway repair with Spring Boot

Ho attivato Flyway aggiungendo semplicemente la dipendenza Flyway nel mio pom.xml. E tutto funziona bene. I miei script di database vengono migrati quando lancio l'app Spring Boot.

Ma ho avuto un errore in uno dei miei script e la mia ultima migrazione non è riuscita. Ora, quando provo a migrare, c'è una "mancata corrispondenza del checksum di migrazione". Normalmente, eseguivo mvn flyway:repair, ma dal momento che sto usando Spring Boot, non dovrei usare il plug-in Flyway Maven. Quindi cosa dovrei fare?

+0

direi eseguire manualmente 'Flyway repair' come cambiare precedenti file SQL dovrebbe essere molto eccezionale. Ma sembra che i checksum non corrispondano tra i file sql in classpath e local ... – Dush

+0

Ma, come ho detto, quando si utilizza Spring Boot, non si prevede di utilizzare il plug-in Flyway. –

+0

No, ma usando flyway, non ci si aspetta che cambi i file sql esistenti! Soprattutto se sono già stati eseguiti su prod db. È necessario aggiungere sempre nuovi file SQL con le modifiche ogni volta. Posso capire perché spring-boot non supporta questo: dovrebbe rimanere un'operazione manuale e non dovrebbe certamente essere per impostazione predefinita ... (ignorando eventuali modifiche apportate su SQL già eseguito) – Dush

risposta

8

ci sono diversi modi per eseguire una riparazione sul database. Personalmente preferisco la semplice istruzione SQL.

SQL Statement:

Basta eliminare la riga con la migrazione non riuscita. Successivamente è possibile eseguire nuovamente la migrazione.

Run Flyway direttamente

È possibile installare Flyway locale ed eseguire flyway repair nella console

Utilizzare il Flyway Maven Plugin

Aggiungere il Flyway Maven Plugin al vostro pom ed eseguire mvn flyway:repair. Non penso che questo sia in contrasto con il concetto di Spring Boot.

Estendere Primavera Boot

Primavera Boot chiamerà Flyway.migrate() per eseguire la migrazione del database. Se desideri un maggiore controllo, fornire un @Bean che implementa FlywayMigrationStrategy.

Nel FlywayMigrationStrategy è possibile chiamare il metodo di migrazione o ripristino da flyway. Ulteriori informazioni sono disponibili nello Spring Boot Reference Guide.

Non penso che l'FlywayMigrationStrategy nell'applicazione sia il posto giusto per riparare il database. Una migrazione fallita è un'eccezione e dovrebbe essere gestita all'esterno dell'applicazione.

+0

Can flyway-maven-plugin può solo leggere le proprietà dell'origine dati dal file application.properties di Spring's Boot? – ieXcept

+0

@Daniel Käfer Che ne dici di utilizzare FlywayCallback per ripulire i dati in schema_version (vale a dire eliminare la migrazione non riuscita) prima dell'inizio della migrazione? –

+0

@DharmvirTiwari Non penso che sia una buona idea. Se fallisce la prima volta, fallirà anche la seconda volta. Devi fare qualcosa per farlo funzionare e puoi manuel rimuovere la riga nella tabella schema_version. –

2

Flyway Maven Plugin

solo aggiungere queste informazioni a @ risposta di Daniel

1.

 ... 
     <plugin> 
      <groupId>org.flywaydb</groupId> 
      <artifactId>flyway-maven-plugin</artifactId> 
      <version>4.1.0</version> 
      <configuration> 
       <url>jdbc:mysql://localhost:3306</url> 
       <user>root</user> 
       <password>root</password> 
       <schemas> 
        <schema>[your_schema]</schema> 
       </schemas> 
      </configuration> 
     </plugin> 
     ... 

2.

flyway mvn: pulito

3.

mvn flyway: riparazione

PS .: se il passo 2 e 3 non funzionano modificare l'ordine.

Maggiori informazioni su obiettivi Maven: https://flywaydb.org/documentation/maven/

+0

Can flyway-maven-plugin può solo leggere le proprietà dell'origine dati dal file application.properties di Spring's Boot? – ieXcept

+0

@ieXcept Che tipo di informazioni vorresti aggiungere al tuo file di proprietà? –

+0

Ho già aggiunto 'spring.datasource.url',' spring.datasource.username', 'spring.datasource.password'. Ecco come la mia app si connette a db. Posso riutilizzare queste proprietà per il plugin? – ieXcept