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 ()); }
6. @SqlConfig

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.