Spring Boot med SQLite

1. Oversigt

I denne hurtige vejledning gennemgår vi trin til brug af en SQLite-database i en JPA-aktiveret Spring Boot-applikation.

Spring Boot understøtter et par velkendte databaser i hukommelsen ud af kassen, men SQLite kræver lidt mere fra os.

Lad os se på, hvad det kræver.

2. Opsætning af projekt

Til vores illustration, vi starter med en Spring Data Rest-app, vi har brugt i tidligere tutorials.

I pom skal vi tilføje sqllite-jdbc afhængighed:

 org.xerial sqlite-jdbc 3.25.2 

Denne afhængighed giver os, hvad vi har brug for for at bruge JDBC til at kommunikere med SQLite. Men, hvis vi skal bruge en ORM, er det ikke nok.

3. SQLite Dialect

Se, Dvaletilstand leveres ikke med en Dialekt til SQLite. Vi er nødt til at skabe en selv.

3.1. Forlænger Dialekt

Vores første skridt er at udvide org.hibernate.dialect.Dialect klasse til at registrere datatyperne leveret af SQLite:

offentlig klasse SQLiteDialect udvider Dialekt {offentlig SQLiteDialect () {registerColumnType (Types.BIT, "heltal"); registerColumnType (Types.TINYINT, "tinyint"); registerColumnType (Typer.SMALLINT, "smallint"); registerColumnType (Types.INTEGER, "heltal"); // andre datatyper}}

Der er flere, så tjek bestemt prøvekoden for resten.

Derefter skal vi tilsidesætte nogle standarder Dialekt adfærd.

3.2. Support til identitetskolonne

For eksempel, vi er nødt til at fortælle dvale, hvordan SQLite håndterer @Id kolonner, som vi kan gøre med en brugerdefineret IdentityColumnSupport implementering:

offentlig klasse SQLiteIdentityColumnSupport udvider IdentityColumnSupportImpl {@Override public boolean supportsIdentityColumns () {return true; } @ Override public String getIdentitySelectString (String table, String column, int type) throw MappingException {return "select last_insert_rowid ()"; } @ Override public String getIdentityColumnString (int type) kaster MappingException {return "heltal"; }}

For at holde tingene enkle her, lad os holde identitetskolonnetypen til Heltal kun. Og for at få den næste tilgængelige identitetsværdi specificerer vi den passende mekanisme.

Derefter tilsidesætter vi simpelthen den tilsvarende metode i vores vækst SQLiteDialect klasse:

@ Overstyr offentlig IdentityColumnSupport getIdentityColumnSupport () {returner ny SQLiteIdentityColumnSupport (); }

3.3. Deaktiver håndtering af begrænsninger

Og, SQLite har ikke understøttelse af databasebegrænsninger, så vi bliver nødt til at deaktivere dem ved igen at tilsidesætte de passende metoder til både primære og udenlandske nøgler:

@ Override offentlig boolsk hasAlterTable () {returner falsk; } @ Override offentlige boolske dropConstraints () {returner falsk; } @ Override public String getDropForeignKeyString () {return ""; } @ Override public String getAddForeignKeyConstraintString (String cn, String [] fk, String t, String [] pk, boolean rpk) {return ""; } @ Override public String getAddPrimaryKeyConstraintString (String constraintName) {return ""; }

Og om et øjeblik vil vi være i stand til at henvise til denne nye dialekt i vores Spring Boot-konfiguration.

4. Datakilde Konfiguration

Også siden Spring Boot giver ikke konfigurationsstøtte til SQLite-database ud af boksen, vi har også brug for at afsløre vores egne Datakilde bønne:

@Autowired Environment env; @Bean public DataSource dataSource () {final DriverManagerDataSource dataSource = ny DriverManagerDataSource (); dataSource.setDriverClassName (env.getProperty ("driverClassName")); dataSource.setUrl (env.getProperty ("url")); dataSource.setUsername (env.getProperty ("bruger")); dataSource.setPassword (env.getProperty ("adgangskode")); returnere datakilde; }

Og endelig konfigurerer vi følgende egenskaber i vores vedholdenhed. ejendomme fil:

driverClassName = org.sqlite.JDBC url = jdbc: sqlite: hukommelse: myDb? cache = delt brugernavn = sa adgangskode = sa hibernate.dialect = com.baeldung.dialect.SQLiteDialect hibernate.hbm2ddl.auto = create-drop hibernate.show_sql = rigtigt

Bemærk, at vi skal beholde cachen som delt for at holde databaseopdateringerne synlige på tværs af flere databaseforbindelser.

Så med ovenstående konfigurationer starter appen og starter en in-memory database kaldet myDb, som den resterende Spring Data Rest-konfiguration kan tage op.

5. Konklusion

I denne artikel tog vi et eksempel på Spring Data Rest-applikation og pegede det på en SQLite-database. For at gøre det var vi imidlertid nødt til at oprette en brugerdefineret dvale-dialekt.

Sørg for at tjekke applikationen over på Github. Bare løb med mvn -Dspring.profiles.active = sqlite spring-boot: kør og gennemse // localhost: 8080.


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