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