Použite Liquibase na bezpečný vývoj vašej databázovej schémy

1. Prehľad

V tomto rýchlom výučbe využijeme Liquibase na vývoj databázovej schémy webovej aplikácie Java.

Najprv sa zameriame na všeobecnú aplikáciu Java a tiež sa zameriame na niektoré zaujímavé možnosti dostupné pre Spring a Hibernate.

Veľmi stručne povedané, jadro používania Liquibase je the changeLog spis - súbor XML, ktorý sleduje všetky zmeny, ktoré je potrebné vykonať pri aktualizácii databázy.

Začnime závislosťou Maven, ktorú musíme pridať do našej pom.xml:

 org.liquibase liquibase-core 3.4.1 

Môžete tiež skontrolovať, či je tu novšia verzia Liquidibase-Core.

2. Denník zmien databázy

Poďme sa teraz pozrieť na jednoduchý changeLog súbor - tento pridáva iba stĺpec “adresa„K stolu“používateľov“:

Všimnite si, ako je sada zmien označená znakom id a an autor - zabezpečiť, aby ho bolo možné jednoznačne identifikovať a použiť iba raz.

Nevidíme, ako to zapojiť do našej aplikácie, a uistite sa, že sa spustí pri spustení aplikácie.

3. Spustite Liquibase s jarnou fazuľou

Naša prvá možnosť, ako spustiť zmeny pri štarte aplikácie, je cez Spring bean. Existuje samozrejme veľa ďalších spôsobov, ale ak máme dočinenia s jarnou aplikáciou - je to dobrý a jednoduchý spôsob, ako ísť:

@Bean public SpringLiquibase liquibase () {SpringLiquibase liquibase = nový SpringLiquibase (); liquibase.setChangeLog ("classpath: liquibase-changeLog.xml"); liquibase.setDataSource (dataSource ()); spätná kvapalina; }

Všimnite si, ako to ukazujeme na platné changeLog súbor, ktorý musí existovať v triede.

4. Použite Liquibase With Spring Boot

Ak používate Spring Boot, nie je potrebné definovať a Bean pre Liquibase.

Všetko, čo potrebujete, je vložiť zmeny do protokolu “db / changelog / db.changelog-master.yaml”A migrácia Liquibase sa spustí automaticky pri štarte.

Poznač si to:

  • Musíte pridať „Liquidibase-core”Závislosť.
  • Predvolený súbor denníka zmien môžete zmeniť pomocou „Liquidibase.zmeniť-denník”- napríklad:
liquibase.change-log = classpath: liquibase-changeLog.xml

5. Zakážte Liquibase v Spring Boot

Niekedy možno budeme musieť pri spustení deaktivovať vykonávanie migrácie Liquibase.

Najjednoduchšou možnosťou, ktorú máme, je použiť a pružina.liquibase.zapnutá nehnuteľnosť. Takto zostane všetka zostávajúca konfigurácia Liquibase nedotknutá.

Tu je príklad pre Spring Boot 2:

spring.liquibase.enabled = false

Pre Spring Boot 1.x musíme použiť a Liquidibase. povolené nehnuteľnosť:

Liquidibase.enabled = false

6. Vytvorte changeLog S doplnkom Maven

Namiesto písania changeLog súbor manuálne - môžeme použiť doplnok Liquibase Maven na vygenerovanie jedného a ušetriť si tak veľa práce.

6.1. Konfigurácia doplnku

Tu sú zmeny v našom 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. Vytvorte a ChangeLog Z existujúcej databázy

Pomocou doplnku môžeme vygenerovať zoznam zmien z existujúcej databázy:

mvn liquibase: generateChangeLog

Tu sú vlastnosti liquidibase:

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

Konečným výsledkom je changeLog súbor, ktorý môžeme použiť buď na vytvorenie počiatočnej schémy DB, alebo na vyplnenie údajov. Takto by to vyzeralo pre našu príkladnú aplikáciu:

                     ... 

6.3. Vytvorte a ChangeLog Z rozdielu medzi dvoma databázami

Pomocou pluginu môžeme vygenerovať changeLog súbor rozdielov medzi dvoma existujúcimi databázami (napríklad: vývoj a výroba):

mvn liquibase: rozdiel

Tu sú vlastnosti:

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_redd diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml referenceDriver = org.h2.Driver referenceUsername = sa referencePassword =

A tu je úryvok vygenerovaného changeLog:

Toto je super výkonný spôsob, ako vyvinúť svoju DB napríklad tým, že umožníte Hibernate automaticky vygenerovať novú schému pre vývoj a potom ju použiť ako referenčný bod proti starej schéme.

7. Použite doplnok Hibernate Liquibase

Ak aplikácia používa režim dlhodobého spánku - pozrieme sa na veľmi užitočný spôsob generovania changeLog.

Najprv - tu je postup hibernácia Liquidibase plugin by mal byť nakonfigurovaný v Maven:

7.1. Konfigurácia doplnku

Najskôr si nakonfigurujme nový plugin a používajme správne závislosti:

  org.liquibase liquibase-maven-plugin 3.4.1 src / main / resources / liquibase.properties org.liquibase.ext Liquidibase-hibernate4 3,5 org.springframework jarné fazule 4.1.7.RELEASE org.springframework.data spring-data-jpa 1.7.3. UVOĽNENIE 

7.2. Vytvorte a changeLog z rozdielov medzi entitami databázy a perzistencie

Teraz, pre zábavnejšiu časť. Tento doplnok môžeme použiť na vygenerovanie changeLog súbor z rozdielov medzi existujúcou databázou (napríklad produkciou) a našimi novými entitami perzistencie.

Takže - aby to bolo jednoduché - po zmene entity môžete jednoducho vygenerovať zmeny oproti starej schéme DB a získať čistý a výkonný spôsob, ako rozvinúť svoju schému vo výrobe.

Tu sú vlastnosti liquidibase:

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

Poznámka: referenceUrl používa skenovanie balíkov, takže nárečie parameter je povinný údaj.

8. Záver

V tomto tutoriáli sme ilustrovali niekoľko spôsobov, ako používať Liquibase a dostať sa na bezpečný a vyspelý spôsob používania vývoj a refaktorovanie schémy DB aplikácie Java.

Implementácia všetkých týchto príkladov a útržkov kódu nájdete v môj projekt github - toto je projekt založený na Eclipse, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


$config[zx-auto] not found$config[zx-overlay] not found