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.