A Liquibase segítségével biztonságosan fejlesztheti az adatbázis-sémát

1. Áttekintés

Ebben a gyors bemutatóban felhasználjuk Liquibase az adatbázis-séma fejlesztéséhez Java webalkalmazás.

Először egy általános Java alkalmazásra fogunk összpontosítani, valamint koncentráltan megvizsgáljuk a Spring és a Hibernate elérhető érdekes lehetőségeit.

Nagyon röviden a Liquibase használatának lényege a változási napló fájl - egy XML fájl, amely nyomon követi az összes változást, amelyet a DB frissítéséhez el kell futtatni.

Kezdjük azzal a Maven-függőséggel, amelyet hozzá kell adnunk a sajátunkhoz pom.xml:

 org.liquibase liquibase-mag 3.4.1 

Azt is ellenőrizheti, hogy itt van-e a liquibase-core újabb verziója.

2. Az adatbázis-módosítási napló

Most vessünk egy pillantást egy egyszerűre változási napló fájl - ez csak egy oszlopot ad hozzácím"Az asztalhoz"felhasználók“:

Vegye figyelembe, hogyan azonosítja a változáskészletet egy id és egy szerző - annak biztosítása, hogy egyedileg azonosítható legyen és csak egyszer alkalmazható.

Ne nézzük meg, hogyan lehet ezt bekötni az alkalmazásunkba, és győződjünk meg róla, hogy az az alkalmazás indításakor fut.

3. Futtassa a Liquibase-t tavaszi babgal

Első lehetőségünk a változtatások futtatása az alkalmazás indításakor egy tavaszi babon keresztül történik. Természetesen sok más módszer is létezik, de ha egy tavaszi alkalmazással foglalkozunk - ez egy jó, egyszerű módszer:

@Bean public SpringLiquibase liquibase () {SpringLiquibase liquibase = új SpringLiquibase (); liquibase.setChangeLog ("osztályút: liquibase-changeLog.xml"); liquibase.setDataSource (dataSource ()); visszatérő likibáz; }

Vegye figyelembe, hogy miként mutatunk rá érvényes változási napló fájl, amelynek léteznie kell az osztályúton.

4. Használjon Liquibase-t tavaszi csomagtartóval

Ha a Spring Boot programot használja, akkor nincs szükség a Bab a Liquibase számára.

Csak annyit kell tennie, hogy beírja a változásnaplót “db / changelog / db.changelog-master.yaml”És a Liquibase migrációk automatikusan elindulnak indításkor.

Vegye figyelembe, hogy:

  • Hozzá kell adnia aliquibase-mag”Függőség.
  • Az alapértelmezett változásnaplófájlt a „liquibase.change-log”Tulajdonság - például:
liquibase.change-log = classpath: liquibase-changeLog.xml

5. Tiltsa le a Liquibase-t a tavaszi indításkor

Előfordulhat, hogy indításkor le kell tiltanunk a Liquibase migráció végrehajtását.

A legegyszerűbb lehetőségünk az a használata tavasz.liquibase.engedélyezett ingatlan. Így az összes fennmaradó Liquibase konfiguráció érintetlen marad.

Íme a példa a Spring Boot 2-re:

spring.liquibase.enabled = hamis

A Spring Boot 1.x-hez a liquibase.engedélyezett ingatlan:

liquibase.enabled = hamis

6. Generálja a változási napló Maven bővítménnyel

Az írás helyett változási napló fájl manuálisan - használhatjuk a Liquibase Maven bővítményt az előállításához, és sok munkát spórolhatunk meg magunknak.

6.1. A beépülő modul beállítása

Itt vannak a változások a mi 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. Generálja a Változási napló Meglévő adatbázisból

A beépülő modullal létrehozhatunk egy változásnaplót egy meglévő adatbázisból:

mvn liquibase: generálChangeLog

Itt van a liquibase tulajdonságai:

url = jdbc: mysql: // localhost: 3306 / oauth_reddit felhasználónév = tutorialuser jelszó = tutorialmy5ql driver = com.mysql.jdbc.Driver outputChangeLogFile = src / main / resources / liquibase-outputChangeLog.xml

A végeredmény egy változási napló fájl, amelyet akár kezdeti DB séma létrehozására, akár adatok feltöltésére használhatunk. Így néz ki ez a példa alkalmazásunk számára:

                     ... 

6.3. Generálja a Változási napló Két adatbázis közötti különbségből

A plugint használhatjuk a változási napló fájl a két meglévő adatbázis különbségéből (például: fejlesztés és gyártás):

mvn liquibase: diff

Itt vannak a tulajdonságok:

changeLogFile = src / main / resources / liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit felhasználónév = tutorialuser jelszó = tutorialmy5ql driver = com.mysql.jdbc.Driver referenceUrl = jdbc: h2: mem: oaut diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml referenceDriver = org.h2.Driver referenceUsername = sa referencePassword =

És itt van egy részlet a létrehozottból változási napló:

Ez egy rendkívül hatékony módszer a DB fejlesztésére, például lehetővé téve a Hibernate számára, hogy automatikusan generáljon egy új sémát a fejlesztéshez, majd ezt használja referenciapontként a régi sémával szemben.

7. Használja a Liquibase Hibernate bővítményt

Ha az alkalmazás hibernált módot használ - egy nagyon hasznos módszert fogunk megnézni a változási napló.

Először - itt van a liquibase-hibernál a plugint a Maven-ben kell konfigurálni:

7.1. A beépülő modul beállítása

Először állítsuk be az új plugint a megfelelő függőségek használatával:

  org.liquibase liquibase-maven-plugin 3.4.1 src / main / resources / liquibase.properties org.liquibase.ext liquibase-hibernate4 3.5 org.springframework spring-bab 4.1.7.RELEASE org.springframework.data spring-data-jpa 1.7.3.KÖZLEMÉNY 

7.2. Generálja a változási napló az adatbázis és a perzisztencia entitások közötti különbségektől

Most a szórakoztató részért. Használhatjuk ezt a bővítményt a változási napló fájl egy meglévő adatbázis (például a termelés) és az új perzisztencia entitásaink közötti különbségekből.

Tehát - a dolgok egyszerűbbé tétele érdekében - az entitás módosítása után egyszerűen előállíthatja a módosításokat a régi DB sémához képest tiszta és hatékony módszer a séma fejlesztésére a termelésben.

Itt vannak a likibáz tulajdonságai:

changeLogFile = classpath: liquibase-changeLog.xml url = jdbc: mysql: // localhost: 3306 / oauth_reddit felhasználónév = tutorialuser jelszó = tutorialmy5ql driver = com.mysql.jdbc.Driver referenceUrl = hibernálás: tavasz: org.baodel.persence ? dialekt = org.hibernate.dialect.MySQLDialect diffChangeLogFile = src / main / resources / liquibase-diff-changeLog.xml

Megjegyzés: A referenciaUrl csomagolvasást használ, ezért a nyelvjárás paraméter szükséges.

8. Következtetés

Ebben az oktatóanyagban a Liquibase használatának számos módját szemléltettük, és eljuthatunk a biztonságos és kiforrott módszerhez egy Java alkalmazás DB sémájának fejlesztése és átalakítása.

Mindezen példák és kódrészletek megvalósítása ban található github projektem - ez egy Eclipse alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.