Gyors útmutató a kezdeti adatok betöltéséhez a tavaszi indítással
1. Áttekintés
A Spring Boot megkönnyíti az adatbázis-változtatások egyszerű és egyszerű kezelését. Ha elhagyjuk az alapértelmezett konfigurációt, az entitásokat keres a csomagjainkban, és automatikusan létrehozza a megfelelő táblákat.
De néha szükségünk lesz valamilyen finomabb részletességű ellenőrzésre az adatbázis-módosítások felett. Ekkor használhatjuk a adatok.sql és schema.sql fájlokat tavasszal.
2. A adatok.sql File
Tegyük fel itt azt a feltevést is, hogy a JPA-val dolgozunk - és definiálunk egy egyszerűt Ország entitás a projektünkben:
@Entity public class Ország {@Id @GeneratedValue (strategy = IDENTITY) private Integer id; @Column (nullable = false) privát karakterlánc neve; // ...}
Ha futtatjuk az alkalmazásunkat, A Spring Boot létrehoz egy üres asztalt számunkra, de nem tölti be semmivel.
Ennek egyszerű módja egy fájl nevű fájl létrehozása data.sql:
INSERT INTO ország (név) ÉRTÉKEK („India”); INSERT INTO ország (név) ÉRTÉKEK („Brazília”); INSERT INTO ország (név) ÉRTÉKEK („USA”); INSERT INTO ország (név) ÉRTÉKEK („Olaszország”);
Amikor ezzel a fájllal futtatjuk a projektet az osztályúton, Spring felveszi és felhasználja az adatbázis feltöltésére.
3. Az schema.sql File
Néha nem akarunk az alapértelmezett séma létrehozási mechanizmusra hagyatkozni. Ilyen esetekben létrehozhatunk egy szokást schema.sql fájl:
CREATE TABLE ország (id INTEGER NOT NULL AUTO_INCREMENT, név VARCHAR (128) NOT NULL, PRIMARY KEY (id));
Spring felveszi ezt a fájlt, és felhasználja egy séma létrehozásához.
Fontos megjegyezni azt is, hogy a konfliktusok elkerülése érdekében kapcsolja ki az automatikus séma létrehozását:
spring.jpa.hibernate.ddl-auto = nincs
4. Az adatbázis-létrehozás ellenőrzése a hibernálás segítségével
A tavasz biztosítja a közös parlamenti képviselő-testületet a Hibernate által a DDL előállításához használt tulajdonság: tavasz.jpa.hibernate.ddl-auto.
A normál hibernált tulajdonságértékek a következők: teremt, frissítés, create-drop, érvényesít és egyik sem:
- teremt - A hibernálás először eldobja a meglévő táblázatokat, majd új táblázatokat hoz létre
- frissítés - a leképezések (kommentárok vagy XML) alapján létrehozott objektum modellt összehasonlítják a meglévő sémával, majd a Hibernate frissíti a sémát a diff szerint. Soha nem törli a meglévő táblázatokat vagy oszlopokat, még akkor sem, ha azokat már nem igényli az alkalmazás
- create-drop - hasonló teremt, azzal a kiegészítéssel, hogy a hibernálás minden művelet befejezése után elveti az adatbázist. Általában az egység tesztelésére használják
- érvényesít - A hibernálás csak azt ellenőrzi, hogy a táblák és oszlopok léteznek-e, különben kivételt vet
- egyik sem - ez az érték gyakorlatilag kikapcsolja a DDL generációt
A Spring Boot belső alapértelmezés szerint ez a paraméter értéke create-drop ha nem észleltek sémakezelőt, különben egyik sem minden más esetben.
Gondosan kell beállítanunk az értéket, vagy az egyik másik mechanizmust kell használnunk az adatbázis inicializálásához.
5. @Sql
A tavasz a @Sql annotáció - deklaratív módszer a tesztsémánk inicializálására és feltöltésére.
Lássuk, hogyan kell használni a @Sql kommentár egy új tábla létrehozásához, és töltse be a táblázatot a kezdeti adatokkal az integrációs tesztünkhöz:
@Sql ({"/ alkalmazottai_schema.sql", "/import_employees.sql"}) nyilvános osztály SpringBootInitialLoadIntegrationTest {@Autowired private EmployeeRepository workerRepository; @Test public void testLoadDataForTestClass () {assertEquals (3, workerRepository.findAll (). Size ()); }}
A. Attribútumai @Sql a jelölések a következők:
- config - helyi konfiguráció az SQL parancsfájlokhoz. Ezt a következő szakaszban részletesen leírjuk
- végrehajtási fázis - azt is megadhatjuk, hogy mikor kell végrehajtani a szkripteket BEFORE_TEST_METHOD vagy AFTER_TEST_METHOD
- nyilatkozatok - deklarálhatjuk az inline SQL utasítások végrehajtását
- szkriptek - deklarálhatjuk az végrehajtandó SQL szkriptfájlok elérési útjait. Ez egy alias a érték tulajdonság
A @Sql annotáció osztály vagy metódus szinten használható. Betölthetünk egy adott tesztesethez szükséges további adatokat a módszer jegyzetével:
@Test @Sql ({"/ import_senior_employees.sql"}) public void testLoadDataForTestCase () {assertEquals (5, workerRepository.findAll (). Size ()); }
Tudunk konfigurálja az SQL parancsfájlok elemzésének és futtatásának módját a @SqlConfig annotáció.
@SqlConfig osztály szinten deklarálható, ahol globális konfigurációként szolgál. Vagy fel lehet használni egy adott konfigurálására @Sql annotáció.
Lássunk egy példát, ahol megadjuk az SQL szkriptjeink kódolását, valamint a szkriptek végrehajtásának tranzakciós módját:
@Test @Sql (scripts = {"/import_senior_employees.sql"}, config = @SqlConfig (encoding = "utf-8" ,actionMode = TransactionMode.ISOLATED)) public void testLoadDataForTestCase () {assertEquals (5, workerReposit ).méret()); }
És nézzük meg a @SqlConfig:
- blockCommentStartDelimiter - elválasztó a blokk megjegyzések kezdetének azonosításához az SQL szkript fájlokban
- blockCommentEndDelimiter - elválasztó a blokk megjegyzések végének jelölésére az SQL parancsfájlokban
- commentPrefix - előtag az egysoros megjegyzések azonosításához az SQL parancsfájlokban
- adatforrás - a javax.sql.DataSource bab, amely ellen a szkripteket és utasításokat futtatni fogják
- kódolás - kódolás az SQL parancsfájlokhoz, alapértelmezés szerint platformkódolás
- errorMode - a szkriptek futtatásakor fellépő hiba esetén használt mód
- szétválasztó - az egyes utasítások elválasztására használt karakterlánc, az alapértelmezett érték „-“
- tranzakciókezelő - a bab bab neve PlatformTransactionManager amelyet tranzakciókra fognak használni
- tranzakciós mód - az a mód, amelyet a parancsfájlok végrehajtásakor használnak a tranzakció során
7. @SqlGroup
A Java 8 és újabb verziók lehetővé teszik az ismételt kommentárok használatát. Ez a funkció használható @Sql annotációk is. Java 7-es és régebbi verziók esetén van egy tárolójegyzet - @SqlGroup. Használni a @SqlGroup annotációval többszöröset is kijelenthetünk @Sql kommentárok:
@SqlGroup ({@Sql (scripts = "/employees_schema.sql", config = @SqlConfig (actionMode = TransactionMode.ISOLATED)), @Sql ("/ import_employees.sql")}) nyilvános osztály ; @Test public void testLoadDataForTestCase () {assertEquals (3, workerRepository.findAll (). Size ()); }}
8. Következtetés
Ebben a gyors cikkben megnéztük, hogyan tudunk kihasználni schema.sql és adatok.sql fájlok egy kezdeti séma beállításához és adatokkal való feltöltéséhez. Láttuk azt is, hogyan tudjuk használni @Sql, @SqlConfig, és @SqlGroup jelölések a tesztadatok betöltéséhez a tesztekhez.
Ne feledje, hogy ez a megközelítés jobban megfelel az egyszerű és egyszerű forgatókönyveknek, bármilyen fejlett adatbázis-kezeléshez fejlettebb és kifinomultabb eszközökre lenne szükség, mint például a Liquibase vagy a Flyway.
A kódrészletek, mint mindig, a GitHubon találhatók.