Kratki vodič za učitavanje početnih podataka pomoću Spring Boot

1. Pregled

Spring Boot olakšava upravljanje promjenama baze podataka na jednostavan način. Ako napustimo zadanu konfiguraciju, tražit će entitete u našim paketima i automatski stvoriti odgovarajuće tablice.

Ali ponekad će nam trebati malo preciznijeg nadzora nad izmjenama baze podataka. Tada možemo koristiti podaci.sql i shema.sql datoteke u proljeće.

2. The podaci.sql Datoteka

Uzmimo ovdje i pretpostavku da radimo s JPA - i definirajmo jednostavan Zemlja entitet u našem projektu:

@ Entiteta javna klasa Država {@Id @GeneratedValue (strategija = IDENTITET) privatni Integer id; @Column (nullable = false) ime privatnog niza; // ...}

Ako pokrenemo našu aplikaciju, Spring Boot će stvoriti praznu tablicu za nas, ali je neće popuniti ničim.

Jednostavan način za to je stvaranje datoteke s imenom data.sql:

INSERT INTO zemlja (naziv) VRIJEDNOSTI ('Indija'); INSERT INTO zemlja (naziv) VRIJEDNOSTI ('Brazil'); INSERT INTO zemlja (naziv) VRIJEDNOSTI ('SAD'); INSERT INTO zemlja (naziv) VRIJEDNOSTI ('Italija');

Kada pokrenemo projekt s ovom datotekom na stazi razreda, Spring će je preuzeti i koristiti za popunjavanje baze podataka.

3. The shema.sql Datoteka

Ponekad se ne želimo oslanjati na zadani mehanizam za stvaranje sheme. U takvim slučajevima možemo stvoriti običaj shema.sql datoteka:

STVARI TABELU država (id INTEGER NOT NULL AUTO_INCREMENT, naziv VARCHAR (128) NOT NULL, PRIMARY KEY (id));

Spring će preuzeti ovu datoteku i koristiti je za stvaranje sheme.

Također je važno zapamtiti da isključite automatsko stvaranje sheme kako biste izbjegli sukobe:

proljeće.jpa.hibernate.ddl-auto = nema

4. Kontrola izrade baze podataka pomoću hibernacije

Spring pruža specifičnost JPA svojstvo koje Hibernate koristi za generiranje DDL-a: proljeće.jpa.hibernate.ddl-auto.

Standardne vrijednosti svojstva hibernacije su: stvoriti, ažuriranje, stvoriti-ispustiti, potvrditi i nijedna:

  • stvoriti - Hibernate prvo ispušta postojeće tablice, a zatim stvara nove tablice
  • ažuriranje - objektni model stvoren na temelju mapiranja (bilješke ili XML) uspoređuje se s postojećom shemom, a zatim Hibernate ažurira shemu prema razlici. Nikad ne briše postojeće tablice ili stupce čak i ako ih aplikacija više ne zahtijeva
  • stvoriti-ispustiti - slično stvoriti, uz dodatak da će Hibernate ispustiti bazu podataka nakon završetka svih operacija. Tipično se koristi za jedinično ispitivanje
  • potvrditi - Hibernate samo provjerava postoje li tablice i stupci, inače donosi iznimku
  • nijedna - ova vrijednost učinkovito isključuje DDL generaciju

Spring Boot interno zadana vrijednost ovog parametra na stvoriti-ispustiti ako nije otkriven upravitelj sheme, u suprotnom nijedna za sve ostale slučajeve.

Vrijednost moramo pažljivo postaviti ili koristiti jedan od ostalih mehanizama za inicijalizaciju baze podataka.

5. @Sql

Proljeće također pruža @Sql napomena - deklarativni način inicijalizacije i popunjavanja naše test sheme.

Pogledajmo kako koristiti @Sql napomena za stvaranje nove tablice i također učitavanje tablice s početnim podacima za naš test integracije:

@Sql ({"/ zaposlenici_schema.sql", "/import_employees.sql"}) javna klasa SpringBootInitialLoadIntegrationTest {@Autowired private EmployeeRepository workerRepository; @Test public void testLoadDataForTestClass () {assertEquals (3, workerRepository.findAll (). Size ()); }}

Atributi @Sql napomene su:

  • config - lokalna konfiguracija za SQL skripte. To detaljno opisujemo u sljedećem odjeljku
  • ExecuPhase - također možemo odrediti kada izvršiti skripte BEFORE_TEST_METHOD ili NAKON_TEST_METODA
  • izjave - možemo proglasiti izvršavanje ugrađenih SQL izraza
  • skripte - možemo deklarirati staze do datoteka SQL skripte za izvršenje. Ovo je alias za vrijednost atribut

The @Sql bilješka može se koristiti na razini razreda ili na razini metode. Dodatne podatke potrebne za određeni testni slučaj možemo učitati označavanjem te metode:

@Test @Sql ({"/ import_senior_employees.sql"}) javna praznina testLoadDataForTestCase () {assertEquals (5, workerRepository.findAll (). Size ()); }
6. @SqlConfig

Možemo konfigurirati način na koji ćemo raščlaniti i pokrenuti SQL skripte pomoću @SqlConfig bilješka.

@SqlConfig može se deklarirati na razini klase, gdje služi kao globalna konfiguracija. Ili se može koristiti za konfiguriranje određenog @Sql bilješka.

Pogledajmo primjer gdje specificiramo kodiranje naših SQL skripti kao i način transakcije za izvršavanje skripti:

@Test @Sql (skripte = {"/import_senior_employees.sql"}, config = @SqlConfig (encoding = "utf-8" ,actionMode = TransactionMode.ISOLATED)) javna praznina testLoadDataForTestCase () {assertEquals (5 ,indRepository.5f ).veličina()); }

I pogledajmo razne atribute @SqlConfig:

  • blockCommentStartDelimiter - graničnik za prepoznavanje početka blok komentara u datotekama SQL skripte
  • blockCommentEndDelimiter - graničnik za označavanje kraja blokovskih komentara u datotekama SQL skripte
  • commentPrefix - prefiks za prepoznavanje jednorednih komentara u datotekama SQL skripte
  • izvor podataka - naziv javax.sql.DataSource bean na kojem će se pokretati skripte i izjave
  • kodiranje - kodiranje za datoteke skripti SQL, zadano je kodiranje platforme
  • errorMode - način koji će se koristiti kada se nađe pogreška prilikom pokretanja skripti
  • separator - niz koji se koristi za odvajanje pojedinačnih izraza, zadana vrijednost je "-"
  • actionManager - naziv graha PlatformTransactionManager koji će se koristiti za transakcije
  • actionMode - način koji će se koristiti prilikom izvršavanja skripti u transakciji

7. @SqlGroup

Java 8 i novije verzije omogućuju upotrebu ponovljenih napomena. Ova se značajka može koristiti za @Sql bilješke također. Za Javu 7 i novije verzije postoji napomena o spremniku - @SqlGroup. Koristiti @SqlGroup napomena, možemo proglasiti višestrukim @Sql napomene:

@SqlGroup ({@Sql (skripte = "/employees_schema.sql", config = @SqlConfig (actionMode = TransactionMode.ISOLATED)), @Sql ("/ import_employees.sql")}) javna klasa SpringBootSqlGroupAnToTeReTorIeRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepository.Antar. ; @Test public void testLoadDataForTestCase () {assertEquals (3, workerRepository.findAll (). Size ()); }}

8. Zaključak

U ovom kratkom članku vidjeli smo kako možemo iskoristiti to shema.sql i podaci.sql datoteke za postavljanje početne sheme i popunjavanje podacima. Vidjeli smo i kako se možemo koristiti @Sql, @SqlConfig, i @SqlGroup napomene za učitavanje podataka ispitivanja za testove.

Imajte na umu da je ovaj pristup prikladniji za osnovne i jednostavne scenarije, svako napredno rukovanje bazama podataka zahtijevaće naprednije i profinjenije alate poput Liquibase ili Flyway.

Isječci koda, kao i uvijek, mogu se naći na GitHubu.