Hurtig guide til indlæsning af startdata med Spring Boot

1. Oversigt

Spring Boot gør det virkelig nemt at administrere vores databaseændringer på en nem måde. Hvis vi forlader standardkonfigurationen, søger den efter enheder i vores pakker og opretter automatisk de respektive tabeller.

Men nogle gange har vi brug for en mere detaljeret kontrol over databaseændringerne. Det er når vi kan bruge data.sql og skema.sql filer i foråret.

2. Den data.sql Fil

Lad os også antage her, at vi arbejder med JPA - og definere en simpel Land enhed i vores projekt:

@Entity offentlig klasse Land {@Id @GeneratedValue (strategi = IDENTITET) privat heltal-id; @Column (nullable = false) private String name; // ...}

Hvis vi kører vores ansøgning, Spring Boot opretter en tom tabel for os, men udfylder den ikke med noget.

En nem måde at gøre dette på er at oprette en fil med navnet data.sql:

INDSÆT I LAND (navn) VÆRDIER ('Indien') INDSÆT I LAND (navn) VÆRDIER ('Brasilien') INDSÆT I LAND (navn) VÆRDIER ('USA') INDSÆT I LAND (navn) VÆRDIER ('Italien')

Når vi kører projektet med denne fil på klassestien, samler Spring det op og bruger det til at udfylde databasen.

3. Den skema.sql Fil

Nogle gange ønsker vi ikke at stole på standardmekanismen til oprettelse af skema. I sådanne tilfælde kan vi oprette en brugerdefineret skema.sql fil:

OPRET TABEL land (id INTEGER IKKE NULL AUTO_INCREMENT, navn VARCHAR (128) IKKE NULL, PRIMÆR NØGLE (id));

Spring henter denne fil og bruger den til at oprette et skema.

Det er også vigtigt at huske at slå automatisk skemaoprettelse fra for at undgå konflikter:

spring.jpa.hibernate.ddl-auto = ingen

4. Styring af oprettelse af database ved hjælp af dvale

Spring giver en JPA-specifik egenskab, som dvale bruger til DDL-generering: spring.jpa.hibernate.ddl-auto.

Standardværdierne for dvaleegenskaber er: skab, opdatering, Opret-slip, valider og ingen:

  • skab - Dvale slipper først eksisterende tabeller og opretter derefter nye tabeller
  • opdatering - objektmodellen oprettet baseret på kortlægningerne (annoteringer eller XML) sammenlignes med det eksisterende skema, og derefter opdateres Dvaletilstand skemaet i henhold til diff. Det sletter aldrig de eksisterende tabeller eller kolonner, selvom de ikke længere kræves af applikationen
  • Opret-slip - svarende til skab, med den tilføjelse, at dvale sletter databasen, når alle operationer er afsluttet. Bruges typisk til enhedstest
  • valider - Dvaletilstand validerer kun, om tabellerne og kolonnerne findes, ellers giver den en undtagelse
  • ingen - denne værdi slukker DDL-generationen effektivt

Spring Boot standardindstiller denne parameterværdi internt til Opret-slip hvis der ikke er fundet nogen skemaadministrator, ellers ingen i alle andre tilfælde.

Vi er nødt til at indstille værdien nøje eller bruge en af ​​de andre mekanismer til at initialisere databasen.

5. @Sql

Foråret giver også @Sql annotation - en deklarativ måde at initialisere og udfylde vores testskema på.

Lad os se, hvordan du bruger @Sql kommentar for at oprette en ny tabel og også indlæse tabellen med indledende data til vores integrationstest:

@Sql ({"/ workers_schema.sql", "/import_employees.sql"}) offentlig klasse SpringBootInitialLoadIntegrationTest {@Autowired private EmployeeRepository employeeRepository; @Test offentlig ugyldig testLoadDataForTestClass () {assertEquals (3, employeeRepository.findAll (). Størrelse ()); }}

Egenskaberne for @Sql kommentar er:

  • konfigurere - lokal konfiguration til SQL-scripts. Vi beskriver dette detaljeret i det næste afsnit
  • udførelse fase - Vi kan også angive, hvornår scripts skal udføres, enten FØR_TEST_METHOD eller AFTER_TEST_METHOD
  • udsagn - vi kan erklære indbyggede SQL-sætninger at udføre
  • scripts - vi kan erklære stierne til SQL-script-filer, der skal udføres. Dette er et alias for værdi attribut

Det @Sql kommentar kan bruges på klasseniveau eller metodeniveau. Vi kan indlæse yderligere data, der kræves for en bestemt testsag, ved at kommentere denne metode:

@Test @Sql ({"/ import_senior_employees.sql"}) offentlig ugyldig testLoadDataForTestCase () {assertEquals (5, medarbejderRepository.findAll (). Størrelse ()); }
6. @SqlConfig

Vi kan konfigurere den måde, vi analyserer og kører SQL-scripts på ved hjælp af @SqlConfig kommentar.

@SqlConfig kan erklæres på klasseniveau, hvor det fungerer som en global konfiguration. Eller det kan bruges til at konfigurere et bestemt @Sql kommentar.

Lad os se et eksempel, hvor vi specificerer kodningen af ​​vores SQL-scripts såvel som transaktionstilstand til udførelse af scripts:

@Test @Sql (scripts = {"/import_senior_employees.sql"}, config = @SqlConfig (kodning = "utf-8", transactionMode = TransactionMode.ISOLATED)) ugyldig test testLoadDataForTestCase () {assertEquals (5, medarbejderBas ).størrelse()); }

Og lad os se på de forskellige egenskaber ved @SqlConfig:

  • blockCommentStartDelimiter - afgrænsning for at identificere starten på blokkommentarer i SQL-scriptfiler
  • blockCommentEndDelimiter - afgrænsning for at betegne slutningen af ​​blokkommentarer i SQL-scriptfiler
  • commentPrefix - præfiks for at identificere kommentarer i en enkelt linje i SQL-scriptfiler
  • datakilde - navnet på javax.sql.DataSource bønne, som scripts og udsagn køres mod
  • indkodning - kodning til SQL-scriptfiler, standard er platformskodning
  • errorMode - tilstand, der vil blive brugt, når der opstår en fejl under kørsel af scripts
  • separator - streng bruges til at adskille individuelle udsagn, standard er “-“
  • transactionManager - bønnenavn på PlatformTransactionManager der vil blive brugt til transaktioner
  • transaktionsmetode - den tilstand, der vil blive brugt ved udførelse af scripts i transaktionen

7. @SqlGroup

Java 8 og nyere tillader brug af gentagne kommentarer. Denne funktion kan bruges til @Sql kommentarer også. For Java 7 og derunder er der en containernotering - @SqlGroup. Bruger @SqlGroup kommentar, vi kan erklære flere @Sql kommentarer:

@SqlGroup ({@Sql (scripts = "/employees_schema.sql", config = @SqlConfig (transactionMode = TransactionMode.ISOLATED)), @Sql ("/ import_employees.sql")}) offentlig klasse SpringBootSqlGroupAnnotationIntegrationTestMedarbejder ; @Test offentlig ugyldig testLoadDataForTestCase () {assertEquals (3, employeeRepository.findAll (). Størrelse ()); }}

8. Konklusion

I denne hurtige artikel så vi, hvordan vi kan udnytte skema.sql og data.sql filer til opsætning af et indledende skema og udfyldelse af data. Vi så også, hvordan vi kan bruge @Sql, @SqlConfigog @SqlGroup kommentarer til at indlæse testdata til test.

Husk, at denne tilgang er mere velegnet til grundlæggende og enkle scenarier. Enhver avanceret databashåndtering vil kræve mere avanceret og raffineret værktøj som Liquibase eller Flyway.

Kodestykker kan som altid findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found