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.