Koristite Liquibase da biste sigurno razvili shemu baze podataka

1. Pregled

U ovom brzom uputstvu iskoristit ćemo Liquibase za razvoj sheme baze podataka Java web aplikacije.

Prvo ćemo se usredotočiti na opću Java aplikaciju, a također ćemo usredotočeno pogledati neke zanimljive opcije dostupne za proljeće i hibernaciju.

Ukratko, srž korištenja Liquibasea je the changeLog datoteka - XML ​​datoteka koja prati sve promjene koje treba pokrenuti za ažuriranje DB-a.

Krenimo od ovisnosti o Mavenu koju trebamo dodati u svoju pom.xml:

 org.liquibase liquibase-core 3.4.1 

Također možete provjeriti postoji li ovdje novija verzija liquibase-core.

2. Dnevnik promjena baze podataka

Sada, pogledajmo jednostavan changeLog datoteka - ova dodaje samo stupac “adresa"Na stol"korisnika“:

Imajte na umu kako se skup promjena prepoznaje pomoću iskaznica i an Autor - kako bi se osiguralo da se može jednoznačno identificirati i primijeniti samo jednom.

Nemojmo vidjeti kako to povezati u našu aplikaciju i pobrinimo se da se ona pokreće kad se aplikacija pokrene.

3. Pokrenite Liquibase s proljetnim grahom

Naša prva opcija za pokretanje promjena pri pokretanju aplikacije je putem Spring bean-a. Postoje naravno i mnogi drugi načini, ali ako imamo posla s aplikacijom Spring - ovo je dobar, jednostavan način:

@Bean public SpringLiquibase liquibase () {SpringLiquibase liquibase = new SpringLiquibase (); liquibase.setChangeLog ("put puta: liquibase-changeLog.xml"); liquibase.setDataSource (dataSource ()); vratiti liquibase; }

Imajte na umu kako ga usmjeravamo na valjano changeLog datoteku koja mora postojati na putu predavanja.

4. Koristite Liquibase s Spring Boot

Ako koristite Spring Boot, nema potrebe za definiranjem a Grah za Liquibase.

Sve što trebate je staviti svoj dnevnik promjena u “db / dnevnik promjena / db.changelog-master.yaml”, A migracije Liquibase pokretat će se automatski prilikom pokretanja.

Imajte na umu da:

  • Morate dodati “liquibase-jezgra”Ovisnost.
  • Datoteku dnevnika promjena možete promijeniti pomoću "liquibase.change-log”Svojstvo - na primjer:
liquibase.change-log = classpath: liquibase-changeLog.xml

5. Onemogućite Liquibase u Spring Boot-u

Ponekad ćemo možda trebati onemogućiti izvršavanje migracije Liquibasea prilikom pokretanja.

Najjednostavnija opcija koju imamo je korištenje a proljeće.liquibase.omogućeno imovine. Na taj način, sva preostala konfiguracija Liquibase ostaje netaknuta.

Evo primjera za Spring Boot 2:

opruga.liquibase.enabled = false

Za Spring Boot 1.x moramo koristiti a liquibase.omogućen svojstvo:

liquibase.enabled = false

6. Generirajte changeLog Uz dodatak Maven

Umjesto da napišete changeLog datoteka ručno - možemo koristiti dodatak Liquibase Maven da bismo ga generirali i uštedjeli si puno posla.

6.1. Konfiguracija dodatka

Evo promjena u našem pom.xml:

 org.liquibase liquibase-maven-plugin 3.4.1 ... org.liquibase liquibase-maven-plugin 3.4.1 src / main / resources / liquibase.properties 

6.2. Stvori a ChangeLog Iz postojeće baze podataka

Dodatak možemo koristiti za generiranje dnevnika promjena iz postojeće baze podataka:

mvn liquibase: generirajChangeLog

Ovdje su svojstva liquibase:

url = jdbc: mysql: // localhost: 3306 / oauth_reddit korisničko ime = tutorialuser password = tutorialmy5ql driver = com.mysql.jdbc.Driver outputChangeLogFile = src / main / resources / liquibase-outputChangeLog.xml

Krajnji rezultat je changeLog datoteku koju možemo koristiti ili za stvaranje početne DB sheme ili za popunjavanje podataka. Evo kako bi to izgledalo za našu primjernu aplikaciju:

                     ... 

6.3. Stvori a ChangeLog Iz razlike između dvije baze podataka

Dodatak možemo koristiti za generiranje a changeLog datoteka iz razlika između dvije postojeće baze podataka (na primjer: razvoj i proizvodnja):

mvn liquibase: razl

Evo svojstava:

changeLogFile = src / main / resources / liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit username = tutorialuser password = tutorialmy5ql driver = com.mysql.jdbc.Driver referenceUrl = jdbc: h2: mem: oauth_ diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml referenceDriver = org.h2.Driver referenceUsername = sa referencePassword =

I evo isječka generiranog changeLog:

Ovo je super moćan način da razvijete svoj DB tako što ćete, na primjer, omogućiti Hibernateu da automatski generira novu shemu za razvoj, a zatim je koristi kao referentnu točku u odnosu na staru shemu.

7. Upotrijebite dodatak za hibernaciju Liquibase

Ako aplikacija koristi hibernaciju - pogledati ćemo vrlo koristan način generiranja changeLog.

Prvo - evo kako liquibase-hibernate dodatak treba konfigurirati u Mavenu:

7.1. Konfiguracija dodatka

Prvo, konfigurirajmo novi dodatak i koristimo prave ovisnosti:

  org.liquibase liquibase-maven-plugin 3.4.1 src / main / resources / liquibase.properties org.liquibase.ext liquibase-hibernate4 3.5 org.springframework proljetni grah 4.1.7.OBLOŽENJE org.springframework.data spring-data-jpa 1.7.3.OSLOBOĐENJE 

7.2. Stvori a changeLog od razlika između baze podataka i entiteta postojanosti

Sada, za zabavni dio. Ovim dodatkom možemo generirati changeLog datoteka iz razlika između postojeće baze podataka (na primjer proizvodne) i naših novih entiteta postojanosti.

Dakle, da pojednostavnimo stvari - nakon što se entitet izmijeni, jednostavno možete generirati promjene prema staroj shemi DB-a, dobivajući čist, moćan način za razvoj vaše sheme u proizvodnji.

Evo svojstava liquibase:

changeLogFile = classpath: liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit korisničko ime = tutorialuser password = tutorialmy5ql driver = com.mysql.jdbc.Driver referenceUrl = hibernate: spring: org.baeldung.persistence. ? dialect = org.hibernate.dialect.MySQLDialect diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml

Napomena: referenceUrl koristi skeniranje paketa, pa dijalekt potreban je parametar.

8. Zaključak

U ovom uputstvu ilustrirali smo nekoliko načina korištenja Liquibasea i postizanja sigurnog i zrelog načina razvijanje i refaktoriranje DB sheme Java aplikacije.

Implementacija svih ovih primjera i isječaka koda može se naći u moj github projekt - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.