2016-05-17 12 views
5

Utilizziamo Flyway per la migrazione di db nella nostra app basata su Spring Boot e ora abbiamo l'obbligo di introdurre il supporto multi tenancy mentre si utilizza la strategia di più origini dati. Come parte di questo, abbiamo anche bisogno di supportare la migrazione di più fonti di dati. Tutte le origini dati devono mantenere la stessa struttura, pertanto è necessario utilizzare gli stessi script di migrazione per la migrazione di tutte le origini dati. Inoltre, le migrazioni dovrebbero verificarsi all'avvio dell'applicazione (a differenza del tempo di costruzione, mentre sembra che il plug-in Maven possa essere configurato per migrare più origini dati). Qual è l'approccio migliore da utilizzare per raggiungere questo obiettivo? L'app ha già definito i bean di origine dati, ma Flyway esegue la migrazione solo per l'origine dati primaria.Migrazioni di origini dati multiple utilizzando Flyway in un'applicazione Spring Boot

risposta

4

Flyway supporta le migrazioni codificate in Java e quindi è possibile avviare Flyway durante l'avvio dell'applicazione.

Non sono sicuro di come si configura Flyway per indirizzare un certo numero di origini dati tramite i relativi file di configurazione. Il mio sviluppo è basato sull'uso di Java per chiamare Flyway una volta per fonte di dati su cui ho bisogno di lavorare. Spring Boot supporta l'autowiring dei bean contrassegnati come @FlywayDataSource, ma non ho esaminato il modo in cui questo potrebbe essere utilizzato.

Per una soluzione in-java il codice può essere semplice come

Flyway flyway = new Flyway(); 

    // Set the data source 
    flyway.setDataSource(dataSource); 

    // Where to search for classes to be executed or SQL scripts to be found 
    flyway.setLocations("net.somewhere.flyway"); 

    flyway.setTarget(MigrationVersion.LATEST); 
    flyway.migrate(); 
+0

Primavera di avvio si basa su una serie di classi di configurazione automatica adattiva per creare e configurare i fagioli e metodi di girare su poi durante l'avvio. La passerella si può trovare su {org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration} in modo da poter sostanzialmente copiare il codice necessario in questa classe. Sto per provare la stessa cosa. – Luke

5

Per rendere @Roger Thomas risposta più il modo in primavera Boot:

soluzione più semplice è quella di annotare il DataSource primario con @Primary (che hai già fatto) e lascia che bootstrap esegua la migrazione dell'origine dati primaria in modo "normale".

Per le altre origini dati, migrare tali fonti a mano:

@Configuration 
public class FlywaySlaveInitializer { 

    @Autowired private DataSource dataSource2; 
    @Autowired private DataSource dataSource3; 
    //other datasources 

    @PostConstruct 
    public void migrateFlyway() { 
     Flyway flyway = new Flyway(); 
     //if default config is not sufficient, call setters here 

     //source 2 
     flyway.setDataSource(dataSource2); 
     flyway.migrate(); 

     //source 3 
     flyway.setDataSource(dataSource3); 
     flyway.migrate(); 
    } 
} 
Problemi correlati