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
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();
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();
}
}
- 1. Integrazione Flyway e Spring Boot
- 2. Spring Boot: Hibernate e Flyway Boot Order
- 3. Flyway repair with Spring Boot
- 4. Hibernate + Spring utilizzando più origini dati?
- 5. Come creare migrazioni flyway basate su flyway
- 6. Origini dati multiutente: Spring + Hibernate
- 7. Un modo per "comprimere" le migrazioni Flyway?
- 8. Origini dati multiple con più gestori transazioni in primavera
- 9. applicazione spring-boot senza origine dati
- 10. Convertire l'applicazione Spring esistente in Spring-Boot
- 11. Escludi application.properties durante la generazione di war utilizzando spring boot e spring-boot-maven-plugin
- 12. spring-boot non utilizza application.properties nei test
- 13. I18n in Spring boot + Thymeleaf
- 14. Spring Boot + Spring swagger error
- 15. Spring boot + Groovy + logback.groovy
- 16. Spring Boot - nesting ConfigurationProperties
- 17. Gestisci database multipli con le migrazioni flyway gradle plugin
- 18. Come scaricare EntityGraph dinamicamente in Spring Boot
- 19. recupero dati dal database come json in spring boot
- 20. Servlet Dispatcher in Spring Boot
- 21. spring-boot-starter-tomcat vs spring-boot-starter-web
- 22. Collegamenti vs origini dati
- 23. Creazione di origini dati proprie
- 24. Spring Boot devtools IntelliJ
- 25. Esecuzione di un'app MVC utilizzando Spring Boot + Hibernate + MySql
- 26. Spring boot - configure EntityManager
- 27. Spring Boot + Spring Data con multi tenancy
- 28. Spring Boot con MongoTemplate
- 29. Spring Boot @ Schedched cron
- 30. Spring Boot e FreeMarker
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