Konfigurere et Tomcat-tilkoblingsbasseng i Spring Boot

1. Oversikt

Spring Boot er et meningsfullt - men likevel kraftig - abstraksjonslag plassert på toppen av en vanlig Spring-plattform, noe som gjør utvikling av frittstående og webapplikasjoner en no-brainer. Spring Boot gir noen praktiske "start" -avhengigheter, rettet mot å kjøre og teste Java-applikasjoner med et minimalt fotavtrykk.

En viktig komponent i disse startavhengighetene er spring-boot-starter-data-jpa. Dette lar oss bruke JPA og jobbe med produksjonsdatabaser ved å bruke noen populære JDBC-tilkoblingspooling-implementeringer, for eksempel HikariCP og Tomcat JDBC Connection Pool.

I denne veiledningen, vi lærer hvordan du konfigurerer en Tomcat-tilkoblingsbasseng i Spring Boot.

2. Maven-avhengighetene

Spring Boot bruker HikariCP som standard tilkoblingsbasseng på grunn av sin bemerkelsesverdige ytelse og virksomhetsklare funksjoner.

Slik konfigurerer Spring Boot automatisk en datakilde for tilkoblingsbassenget:

  1. Spring Boot vil se etter HikariCP på klassestien og bruke den som standard når den er tilstede
  2. Hvis HikariCP ikke blir funnet på kursstien, vil Spring Boot hente Tomcat JDBC Connection Pool, hvis den er tilgjengelig
  3. Hvis ingen av disse alternativene er tilgjengelige, velger Spring Boot Apache Commons DBCP2, hvis det er tilgjengelig

For å konfigurere en Tomcat JDBC-tilkoblingsbasseng i stedet for standard HikariCP, vil vi utelukke HikariCP fra spring-boot-starter-data-jpa avhengighet og legg til tomcat-jdbc Maven avhengighet til vår pom.xml:

 org.springframework.boot spring-boot-starter-data-jpa com.zaxxer HikariCP org.apache.tomcat tomcat-jdbc 9.0.10 com.h2database h2 1.4.197 runtime 

Denne enkle tilnærmingen lar oss få Spring Boot ved å bruke en Tomcat-tilkoblingsbasseng uten å måtte skrive en @Konfigurasjon klasse og programmatisk definere en Datakilde bønne.

Det er også verdt å merke seg at i dette tilfellet bruker vi H2-minnedatabasen. Spring Boot vil autokonfigurere H2 for oss uten å måtte spesifisere en database-URL, bruker og passord.

Vi trenger bare å inkludere den tilsvarende avhengigheten i “Pom.xml” filen og Spring Boot vil gjøre resten for oss.

Alternativt det er mulig å hoppe over skannealgoritmen for tilkoblingsbassenget som Spring Boot bruker, og spesifisere en datakilde for tilkoblingssamling i Filen "application.properties", bruker “Spring.datasource.type” eiendom:

spring.datasource.type = org.apache.tomcat.jdbc.pool.DataSource // andre vårens datakildeegenskaper

3. Justere tilkoblingsbassenget med “application.properties”Fil

Når vi har konfigurert en Tomcat-tilkoblingsbasseng i Spring Boot, det er veldig sannsynlig at vi vil sette opp noen ekstra egenskaper for å optimalisere ytelsen og tilpasse noen spesifikke krav.

Vi kan gjøre det i “Application.properties” fil:

spring.datasource.tomcat.initial-size = 15 spring.datasource.tomcat.max-wait = 20000 spring.datasource.tomcat.max-active = 50 spring.datasource.tomcat.max-inaktiv = 15 spring.datasource.tomcat. min-tomgang = 8 spring.datasource.tomcat.default-auto-commit = true 

Vær oppmerksom på at vi har konfigurert noen flere tilkoblingsegenskaper for tilkobling, for eksempel bassengets opprinnelige størrelse og maksimalt og minimum antall ledige tilkoblinger.

Vi kan også spesifisere noen dvalespesifikke egenskaper:

# Dvalemodus-spesifikke egenskaper spring.jpa.show-sql = false spring.jpa.hibernate.ddl-auto = oppdater spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect spring.jpa.properties.hibernate.id.new_generator_mappings = false 

4. Testing av tilkoblingsbassenget

La oss skrive en enkel integrasjonstest for å kontrollere at Spring Boot har riktig konfigurert tilkoblingsbassenget:

@RunWith (SpringRunner.class) @SpringBootTest offentlig klasse SpringBootTomcatConnectionPoolIntegrationTest {@Autowired private DataSource dataSource; @Test offentlig ugyldighet givenTomcatConnectionPoolInstance_whenCheckedPoolClassName_thenCorrect () {assertThat (dataSource.getClass (). GetName ()) .isEqualTo ("org.apache.tomcat.jdbc.pool.DataSource"); }}

5. Et eksempel på en kommandolinjeapplikasjon

Med all tilkobling av rørleggerarbeid allerede satt, la oss bygge et enkelt kommandolinjeprogram.

Ved å gjøre dette kan vi se hvordan vi kan utføre noen CRUD-operasjoner på en H2-database ved hjelp av det kraftige DAO-laget som Spring Data JPA (og transitt Spring Boot) gir ut av boksen.

For en detaljert veiledning om hvordan du kommer i gang med Spring Data JPA, vennligst sjekk denne artikkelen.

5.1. De Kunde Enhetsklasse

La oss først definere en naiv Kunde enhetsklasse:

@Entity @Table (name = "kunder") kunde i offentlig klasse {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat lang id; @Column (name = "first_name") privat streng fornavn; // standard konstruktører / getters / setters / toString}

5.2. De CustomerRepository Grensesnitt

I dette tilfellet vil vi bare utføre CRUD-operasjoner på noen få Kunde enheter. I tillegg må vi hente alle kundene som samsvarer med et gitt etternavn.

Så, alt vi trenger å gjøre er å utvide Spring Data JPA-er CrudRepository grensesnitt og definere en skreddersydd metode:

offentlig grensesnitt CustomerRepository utvider CrudRepository {List findByLastName (strengnavn); }

Nå kan vi enkelt hente en Kunde enhet etternavn.

5.3. De CommandLineRunner Gjennomføring

Til slutt trenger vi i det minste å fortsette noen få Kunde enheter i databasen og bekreft at Tomcat-tilkoblingsbassenget faktisk fungerer.

La oss lage en implementering av Spring Boot's CommandLineRunner grensesnitt. Spring Boot starter opp implementeringen før applikasjonen startes:

offentlig klasse CommandLineCrudRunner implementerer CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger (CommandLineCrudRunner.class); @Autowired privat endelig CustomerRepository repository; offentlig tomkjøring (String ... args) kaster Unntak {repository.save (ny kunde ("John", "Doe")); repository.save (ny kunde ("Jennifer", "Wilson")); logger.info ("Kunder funnet med findAll ():"); repository.findAll (). forEach (c -> logger.info (c.toString ())); logger.info ("Kunden funnet med findById (1L):"); Kundekunde = repository.findById (1L) .orElseGet (() -> ny kunde ("Ikke-eksisterende kunde", "")); logger.info (customer.toString ()); logger.info ("Kunden funnet med findByLastName ('Wilson'):"); repository.findByLastName ("Wilson"). forEach (c -> {logger.info (c.toString ());}); }}

I et nøtteskall, den CommandLineCrudRunner klasse sparer først et par Kunde enheter i databasen. Deretter henter den den første som bruker findById () metode. Til slutt henter den en kunde med findByLastName () metode.

5.4. Kjører Spring Boot Application

Selvfølgelig er det siste vi trenger å gjøre bare å kjøre prøveprogrammet. Så kan vi se Spring Boot / Tomcat tilkoblingsbassengtandem i aksjon:

@SpringBootApplication public class SpringBootConsoleApplication {public static void main (String [] args) {SpringApplication.run (SpringBootConsoleApplication.class); }}

6. Konklusjon

I denne opplæringen lærte vi hvordan vi konfigurerer og bruker et Tomcat-tilkoblingsbasseng i Spring Boot. I tillegg utviklet vi et grunnleggende kommandolinjeprogram for å vise hvor enkelt det er å jobbe med Spring Boot, en Tomcat-tilkoblingsbasseng og H2-databasen.

Som vanlig er alle kodeeksemplene som vises i denne opplæringen tilgjengelig på GitHub.