Bruk Liquibase til å sikkert utvikle databaseskjemaet ditt
1. Oversikt
I denne raske opplæringen bruker vi Liquibase for å utvikle databaseskjemaet av en Java-webapplikasjon.
Vi skal først fokusere på en generell Java-app, og vi vil også ta en fokusert titt på noen interessante alternativer som er tilgjengelige for vår og dvalemodus.
Svært kort er kjernen i å bruke Liquibase de endre logg fil - en XML-fil som holder oversikt over alle endringene som må kjøres for å oppdatere DB.
La oss starte med Maven-avhengigheten vi trenger å legge til i vår pom.xml:
org.liquibase liquibase-core 3.4.1
Du kan også sjekke om det er en nyere versjon av liquibase-core her.
2. Databaseendringsloggen
La oss ta en titt på en enkel endre logg fil - denne legger bare til en kolonne “adresse”Til bordet“brukere“:
Legg merke til hvordan endringssettet identifiseres av en id og en forfatter - for å sikre at den kan identifiseres unikt og bare brukes en gang.
La oss ikke se hvordan vi kan koble dette til applikasjonen vår og sørge for at den kjører når applikasjonen starter.
3. Kjør Liquibase med en vårbønne
Vårt første alternativ for å kjøre endringene ved oppstart av applikasjonen er via en Spring Bean. Det er selvfølgelig mange andre måter, men hvis vi har å gjøre med en vårapplikasjon - er dette en god, enkel vei å gå:
@Bean public SpringLiquibase liquibase () {SpringLiquibase liquibase = new SpringLiquibase (); liquibase.setChangeLog ("classpath: liquibase-changeLog.xml"); liquibase.setDataSource (dataSource ()); retur liquibase; }
Legg merke til hvordan vi peker på en gyldig endre logg filen som må eksistere på klassestien.
4. Bruk Liquibase With Spring Boot
Hvis du bruker Spring Boot, er det ikke nødvendig å definere en Bønne for Liquibase.
Alt du trenger er å legge inn endringsloggen din “db / changelog / db.changelog-master.yaml”Og Liquibase-migrasjoner vil kjøre automatisk ved oppstart.
Noter det:
- Du må legge til “liquibase-kjerne”Avhengighet.
- Du kan endre standard endringsloggfil ved å bruke “liquibase.change-log”Eiendom - for eksempel:
liquibase.change-log = classpath: liquibase-changeLog.xml
5. Deaktiver Liquibase i Spring Boot
Noen ganger kan det hende vi må deaktivere kjøringen av Liquibase-migrering ved oppstart.
Det enkleste alternativet vi har er å bruke en spring.liquibase.enabled eiendom. På denne måten forblir all gjenværende Liquibase-konfigurasjon uberørt.
Her er eksemplet for Spring Boot 2:
spring.liquibase.enabled = false
For Spring Boot 1.x, må vi bruke a liquibase. aktivert eiendom:
liquibase.enabled = false
6. Generer endre logg Med et Maven-plugin
I stedet for å skrive endre logg fil manuelt - vi kan bruke Liquibase Maven-pluginet til å generere en og spare oss for mye arbeid.
6.1. Plugin-konfigurasjon
Her er endringene i vår 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. Generer en ChangeLog Fra en eksisterende database
Vi kan bruke pluginet til å generere en Changelog fra en eksisterende database:
mvn liquibase: createChangeLog
Her er væskeegenskaper:
url = jdbc: mysql: // localhost: 3306 / oauth_reddit brukernavn = tutorialuser passord = tutorialmy5ql driver = com.mysql.jdbc.Driver outputChangeLogFile = src / main / resources / liquibase-outputChangeLog.xml
Sluttresultatet er et endre logg fil som vi kan bruke til å lage et innledende DB-skjema eller for å fylle ut data. Slik ser det ut for eksempelappen vår:
...
6.3. Generer en ChangeLog Fra forskjellen mellom to databaser
Vi kan bruke pluginet til å generere en endre logg fil fra forskjellene mellom to eksisterende databaser (for eksempel: utvikling og produksjon):
mvn liquibase: diff
Her er egenskapene:
changeLogFile = src / main / resources / liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit brukernavn = tutorialbrukerpassord = tutorialmy5ql driver = com.mysql.jdbc.DriverreferanseUrl = jdbc: h2: memit: oauth_red diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml referenceDriver = org.h2.Driver referenceUsername = sa referencePassword =
Og her er et utdrag av den genererte endre logg:
Dette er en superkraftig måte å utvikle DB-en din på - for eksempel - å la dvalemodus automatisk generere et nytt skjema for utvikling, og deretter bruke det som referansepunkt mot det gamle skjemaet.
7. Bruk Liquibase Hibernate Plugin
Hvis applikasjonen bruker dvalemodus - skal vi se på en veldig nyttig måte å generere endre logg.
Først - her er hvordan væskefase-dvalemodus plugin skal konfigureres i Maven:
7.1. Plugin-konfigurasjon
La oss først konfigurere det nye pluginet og bruke de riktige avhengighetene:
org.liquibase liquibase-maven-plugin 3.4.1 src / main / resources / liquibase.properties org.liquibase.ext liquibase-hibernate4 3.5 org.springframework spring-beans 4.1.7.RELEASE org.springframework.data spring-data-jpa 1.7.3.FRIGJØRING
7.2. Generer en endre logg fra Diffs Between a Database and Persistence Entities
Nå, for den morsomme delen. Vi kan bruke dette pluginet til å generere en endre logg fil fra forskjellene mellom en eksisterende database (for eksempel produksjon) og våre nye utholdenhetsenheter.
Så - for å gjøre ting enkelt - når en enhet er endret, kan du ganske enkelt generere endringene mot det gamle DB-skjemaet en ren, kraftig måte å utvikle skjemaet ditt i produksjonen.
Her er liquibase-egenskapene:
changeLogFile = classpath: liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit brukernavn = tutorialbrukerpassord = tutorialmy5ql driver = com.mysql.jdbc.Driver referenceUrl = dvalemodus: vår: org.baeldung.persistence.mod ? dialect = org.hibernate.dialect.MySQLDialect diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml
Merk: referanseUrl bruker pakkeskanning, så dialekt parameter kreves.
8. Konklusjon
I denne opplæringen illustrerte vi flere måter å bruke Liquibase og komme til en trygg og moden måte å utvikle og omorganisere DB-skjemaet til en Java-app.
Implementeringen av alle disse eksemplene og kodebiter finner du i mitt github-prosjekt - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.