Paolo Dell'Aguzzo
  • Chi sono
  • Cosa offro
  • Portfolio e Carriera
    • Carriera
    • Portfolio
  • PRESS e Guest Post
  • Contatti
  • Blog
Paolo Dell'Aguzzo
  • Chi sono
  • Cosa offro
  • Portfolio e Carriera
    • Carriera
    • Portfolio
  • PRESS e Guest Post
  • Contatti
  • Blog
Set 11
migrazione script database flywaymigrazione script database flyway

Spring Boot e Flyway, migrazione script database da codice

  • 11/09/2017
  • Paolo Dell'Aguzzo
  • No Comments
  • Programmazione
  • database, database migration, flyway, heroku, java, spring boot
Ciao 🙂

In questo articolo voglio spiegarti come far sì di utilizzare Flyway per la migrazione degli script del database con una web app che utilizza Spring Boot. Normalmente per fare queste prove utilizzo Heroku così da poter rilasciare l’applicazione. Se vuoi partire dalla base ed utilizzare Heroku ti consiglio di iscriverti al piano gratuito e dunque seguire questo tutorial. Se vuoi ho scritto anche un articolo con video per guidarti: [VIDEO] Come Registrarsi e Come Iniziare con Heroku.

Una volta che hai la tua applicazione Java sei pronto per partire.

Cos’è Flyway?

Flyway è un tool per la migrazione del database. Funziona con Oracle, PostgreSQL, SQLServer, MySQL, MariaDB, SQLite, Derby e tanti altri database. E’ molto affidabile, infatti non mi ha mai dato un problema nemmeno con applicazioni cross-schema, né con script di grandi dimensioni (non mi viene in mente un caso in cui non abbia funzionato). Ti permette di tenere traccia delle modifiche che vengono fatte al database aiutandoti a mantenere un database identico in ogni ambiente.

Per esempio in passato utilizzavo diversi ambienti per ciascuna applicazione: locale, sviluppo, test e produzione. Ognuno di questi ha il suo database. In locale ho tutto ciò che sto sviluppando, incluse tabelle nuove ed i miei script arrivano alla versione 000625. In sviluppo ancora mancano gli ultimi 2 script e siamo alla versione 000623. Non appena farò push (o solo commit per chi usa SVN) l’ambiente di sviluppo subirà cambiamenti nel database con la migrazione che eseguirà gli script 000624 e 000625. In test il mio ambiente invece è più o meno stabile, serve al cliente per poter accedere e testare i nuovi sviluppi e trova solo feature concluse. La migrazione del database in test è ferma alla versione 000610. In produzione gli utenti non ricevono rilasci da 2 settimane, quindi ho ancora la versione 000605.

Mentre sviluppo, se trovo un errore in una struttura del database, una function, trigger o procedure non devo far altro che fare un nuovo script per risolvere il problema ed il problema verrà risolto in tutti gli ambienti durante i rilasci. La cosa positiva è che avendo eseguito con estrema certezza sempre gli stessi script flyway e sempre nello stesso ordine, se l’errore è presente in un ambiente è sicuramente presente in tutti gli altri ambienti (o almeno in tutti quelli che hanno effettuato già quella migrazione).

Non ti dimenticare anche dei team con più sviluppatori. Non c’è modo più sicuro di questo per far sì che tutti abbiano la stessa identica situazione in locale.

Development Category (English)728x90

Il Main

Una volta fatto il setup iniziale della spring boot app seguendo il tutorial di cui sopra ti ritroverai con una classe Main.

Questa classe utilizza già le annotazioni:

  • @Controller
  • @SpringBootApplication

Inoltre è caratterizzata da diversi endpoint e dal @Bean del DataSource. All’interno del Bean del DataSource puoi iniziare ad utilizzare Flyway da codice. Nel mio caso ho cercato di fare una configurazione iniziale e rapida:

Deep Learning Specialization on Coursera

flyway migrate and hikari DataSource

Quando farai partire l’applicazione e verrà eseguito il bean avrai il datasource “popolato” e verrà eseguito il migrate di flyway.

Quali script vengono utilizzati?

Gli script SQL che vengono utilizzati vanno inseriti di default in src/main/resources/db/migration e vanno nominati in forma V{numero_versione}__{nome_script}{estensione}. Per esempio “V000000__init.sql” o anche “V000001__createTableDogs.sql”:

SQL Scripts Flyway

Il pom

Nel file pom.xml è necessario inserire la dipendenza a flyway-core, quindi:

  • groupId > org.flywaydb
  • artifactId > flyway-core

La version va specificata solo se non si sta usando Spring Boot o un’altra dipendenza che già si porta con sé flyway-core.

Dopo di che, per chi utilizza Spring Boot e riceve l’errore di ClassNotFoundException sulla classe org.springframework.jdbc.support.MetaDataAccessException deve inserire nel pom.xml anche il richiamo alla dipendenza:

  • groupId > org.springframework
  • artifactId > spring-jdbc

Esecuzione

Collegati al database con il tuo strumento preferito e fai partire la tua applicazione. Nel caso di Heroku ricorda di eseguire in ordine:

  • mvn package
  • heroku local

A questo punto vedrai comparire le tabelle nel tuo schema. Per questa applicazione ho un database locale ed un database di produzione. Quando fai il push della tua applicazione ed esegui il deploy (nel caso di Heroku è automatico con il push) anche il tuo database di produzione subirà la migrazione degli script.

Conclusione

In questo articolo hai imparato perché è importante utilizzare Flyway e come utilizzarlo con Heroku in particolare. Perchè con Heroku in particolare? Perché nonostante preferisco utilizzare Flyway con il plugin Maven su Heroku non è possibile fare un’operazione di questo tipo. Per approfondire questo argomento puoi provare a seguire anche questa guida.

A breve mi pongo come obiettivo quello di creare un corso su Udemy per insegnare ad un pubblico più vasto come creare un vero e proprio gestionale ReactJS + Java + PostgreSQL.

 

Se hai dubbi o domande non esitare a scrivermi nei commenti ?

Se ti è piaciuto l’articolo seguimi su Facebook e Twitter oppure rimani sempre aggiornato con la newsletter (da 1 a 4 mail al mese!)

Commenti

Condividi:

  • Fai clic qui per condividere su Twitter (Si apre in una nuova finestra)
  • Fai clic per condividere su Facebook (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Tumblr (Si apre in una nuova finestra)
  • Fai clic qui per condividere su LinkedIn (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Pinterest (Si apre in una nuova finestra)
  • Fai clic per condividere su WhatsApp (Si apre in una nuova finestra)
  • Fai clic per condividere su Telegram (Si apre in una nuova finestra)
  • Clicca per condividere su Skype (Si apre in una nuova finestra)
  • Fai clic qui per stampare (Si apre in una nuova finestra)

Correlati

  • Facebook
  • Twitter
  • Tumblr
  • Pinterest
  • Google+
  • LinkedIn
  • E-Mail

About The Author

Sono sempre stato affascinato dal marketing e dall'informatica a tal punto di unire le due passioni :) Se ti piace l'articolo fammelo sapere in un commento :)

Related Posts

    Fammi sapere cosa ne pensi :) Annulla risposta

    Impara ReactJS imparare react
    I 10 + 1 Libri che Dovrebbe Leggere Ogni Programmatore libri programmatore
    Newsletter

    Seguimi su Facebook :)

    Facebook Pagelike Widget
    Impara React Native imparare react native
    10 Cose per Stare Più Comodo in Ufficio stare più comodo in ufficio
    Impara a Creare un Tema Wordpress imparare creare tema wordpress
    Udemy I Migliori Corsi per Programmatori udemy corsi programmatori
    UX: Perché la User Experience è Importante UX importante e cos'è
    Metodologie Agili e Lean: Come migliorare la tua azienda metodologie agili
    Libri per Imparare JavaScript Imparare JavaScript libri

    Articoli recenti

    • 8 consigli per migliorare la tua SEO Locale
    • Come spostare il tuo sito WordPress da un hosting all’altro
    • React, TypeScript e Redux: creazione delle prime pagine

    Categorie

    • CSS
    • Interviste
    • Java
    • Lavoro
    • Normative
    • Personale
    • Programmazione
    • Strategia & Marketing
    • Tech
    • Web Design
    • Wordpress
    Paolo Dell'Aguzzo
    Programmatore Software - Marotta di Mondolfo, Pesaro e Urbino
    P. IVA: IT02758450429
    Mail: info@paolodellaguzzo.com
    Via Litoranea, 284/C - Marotta (PU)
    Privacy Policy
    Cookie Policy
    In qualità di Affiliato Amazon, ricevo un guadagno per ciascun acquisto idoneo
    Amazon e il logo Amazon sono marchi registrati di Amazon.com, Inc. o delle sue affiliate
    Programmatore Senigallia, Ancona - Siti web, app iOS e Android, gestionali ReactJS, React Native, Java, SQL, PL/SQL, Heroku

     

    Caricamento commenti...