Konfiguriranje Tomcat Connection Pool-a u Spring Boot-u

1. Pregled

Spring Boot je samopouzdan, ali moćan sloj apstrakcije postavljen na vrh obične Spring platforme, što razvoj samostalnih i web aplikacija čini nimalo pametnim. Spring Boot nudi nekoliko praktičnih "početnih" ovisnosti, usmjerenih na pokretanje i testiranje Java aplikacija s minimalnim otiskom.

Jedna od ključnih komponenti ovih zavisnosti o pokretaču je spring-boot-starter-data-jpa. To nam omogućuje upotrebu JPA i rad s produkcijskim bazama podataka korištenjem nekih popularnih implementacija spremanja JDBC veza, kao što su HikariCP i Tomcat JDBC Connection Pool.

U ovom vodiču, naučit ćemo kako konfigurirati spremište za veze Tomcat u Spring Boot-u.

2. Ovisnosti Mavena

Spring Boot koristi HikariCP kao zadani spreg veze, zbog njegovih izvanrednih performansi i značajki spremnih za poduzeće.

Evo kako Spring Boot automatski konfigurira izvor podataka spremišta veza:

  1. Spring Boot tražit će HikariCP na stazi predavanja i koristiti ga prema zadanim postavkama kada je prisutan
  2. Ako HikariCP nije pronađen na putu predavanja, tada će Spring Boot podići Tomcat JDBC Connection Pool, ako je dostupan
  3. Ako nijedna od ovih opcija nije dostupna, Spring Boot će odabrati Apache Commons DBCP2, ako je dostupna

Da bismo konfigurirali spremište veza Tomcat JDBC umjesto zadanog HikariCP, mi ćemo isključiti HikariCP od spring-boot-starter-data-jpa ovisnost i dodajte tomcat-jdbc Ovisnost o Mavenu našem 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 

Ovaj jednostavan pristup omogućuje nam da dobijemo Spring Boot koristeći Tomcat spremište veze bez potrebe za pisanjem @Konfiguracija klase i programski definirati a Izvor podataka grah.

Također je vrijedno napomenuti da u ovom slučaju koristimo H2 bazu podataka u memoriji. Spring Boot će nam automatski konfigurirati H2, bez potrebe za određivanjem URL-a baze podataka, korisnika i lozinke.

Samo trebamo uključiti odgovarajuću ovisnost u "Pom.xml" file i Spring Boot će učiniti sve ostalo za nas.

Alternativno, moguće je preskočiti algoritam skeniranja spremišta veza koji koristi Spring Boot i izričito navesti izvor podataka o spremanju veza u Datoteka "application.properties", koristiti "Spring.datasource.type" svojstvo:

spring.datasource.type = org.apache.tomcat.jdbc.pool.DataSource // ostala svojstva izvora izvora podataka

3. Ugađanje bazena veze s "primjena.svojstva" Datoteka

Nakon što smo uspješno konfigurirali spremište za veze Tomcat u Spring Boot-u, vrlo je vjerojatno da ćemo htjeti postaviti neka dodatna svojstva za optimizaciju njegove izvedbe i udovoljavanje nekim specifičnim zahtjevima.

To možemo učiniti u "Application.properties" datoteka:

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

Napominjemo da smo konfigurirali nekoliko dodatnih svojstava spremanja veza, kao što su početna veličina spremišta i maksimalan i minimalan broj neaktivnih veza.

Također možemo odrediti neka svojstva hibernacije:

# Hibernate specifična svojstva spring.jpa.show-sql = false spring.jpa.hibernate.ddl-auto = update 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. Testiranje spremišta

Napišimo jednostavan test integracije kako bismo provjerili je li Spring Boot ispravno konfigurirao spremište veza:

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

5. Uzorak aplikacije naredbenog retka

Sa svim postavljenim vodovodima za spajanje veza, napravimo jednostavnu aplikaciju naredbenog retka.

Pritom možemo vidjeti kako izvoditi neke CRUD operacije na H2 bazi podataka koristeći snažni DAO sloj koji Spring Data JPA (i prijelazno Spring Boot) pruža odmah.

Detaljan vodič o tome kako započeti s korištenjem Spring Data JPA potražite u ovom članku.

5.1. The Kupac Entitetna klasa

Prvo definirajmo naivnog Kupac klasa entiteta:

@Entity @Table (name = "kupci") javna klasa Kupac {@Id @GeneratedValue (strategy = GenerationType.AUTO) private long id; @Column (name = "first_name") private String firstName; // standardni konstruktori / getteri / setteri / toString}

5.2. The Repozitorij kupaca Sučelje

U ovom slučaju, samo želimo izvršiti CRUD operacije na nekolicini Kupac entiteta. Uz to, moramo dohvatiti sve kupce koji se podudaraju s danim prezimenom.

Tako, sve što moramo učiniti je proširiti Spring Data JPA CrudRepository sučelje i definirati prilagođenu metodu:

javno sučelje CustomerRepository proširuje CrudRepository {List findByLastName (String lastName); }

Sada možemo lako dohvatiti a Kupac entitet po prezimenu.

5.3. The CommandLineRunner Provedba

Napokon, trebamo barem ustrajati na nekoliko Kupac entiteti u bazi podataka i provjerite radi li naš Tomcat spremište veza stvarno radi.

Stvorimo implementaciju Spring Boot-a CommandLineRunner sučelje. Spring Boot će pokrenuti implementaciju prije pokretanja aplikacije:

javna klasa CommandLineCrudRunner implementira CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger (CommandLineCrudRunner.class); @Autowired privatno konačno spremište CustomerRepository; javno void vođenje (String ... args) baca iznimku {repository.save (novi kupac ("John", "Doe")); repository.save (novi kupac ("Jennifer", "Wilson")); logger.info ("Kupci pronađeni s findAll ():"); repository.findAll (). forEach (c -> logger.info (c.toString ())); logger.info ("Kupac pronađen s findById (1L):"); Kupac kupac = repozitorij.findById (1L) .orElseGet (() -> novi kupac ("Nepostojeći kupac", "")); logger.info (customer.toString ()); logger.info ("Kupac pronađen s findByLastName ('Wilson'):"); repository.findByLastName ("Wilson"). forEach (c -> {logger.info (c.toString ());}); }}

Ukratko, CommandLineCrudRunner razred prvo spasi nekoliko Kupac entiteti u bazi podataka. Dalje, dohvaća prvu pomoću findById () metoda. Konačno, dohvaća kupca pomoću findByLastName () metoda.

5.4. Pokretanje aplikacije Spring Boot

Naravno, posljednja stvar koju moramo učiniti je samo pokrenuti uzorak aplikacije. Tada možemo vidjeti tandem Spring Boot / Tomcat povezivanja spremišta:

@SpringBootApplication javna klasa SpringBootConsoleApplication {javna statička praznina glavna (String [] args) {SpringApplication.run (SpringBootConsoleApplication.class); }}

6. Zaključak

U ovom uputstvu naučili smo kako konfigurirati i koristiti Tomcat spremište za spremanje u Spring Boot-u. Osim toga, razvili smo osnovnu aplikaciju naredbenog retka kako bismo pokazali kako je lako raditi s Spring Boot-om, spremištem veze Tomcat i H2 bazom podataka.

Kao i obično, svi uzorci koda prikazani u ovom vodiču dostupni su na GitHubu.