Post Visninger: 2,227

Hei, teelskere!. Har DU noen gang hørt om tilkobling pooling I JDBC eller HikariCP? Hvis ikke, ingen bekymringer i det hele tatt, det er hva dette innlegget handler om. Vi vil snakke om alle tingene OM jdbc connection pool og implementeringen ved Hjelp Av HikariCP.

HikariCP er en av de raskeste tilkoblingsgruppene som er tilgjengelige i markedet for JDBC-tilkobling. Det gjør tilkobling pooling veldig enkelt. gjør deg klar til å lære mer om dette dyret. Men før, gjør teen din til å nippe og lære. Og for eksemplet som brukes i innlegget, kan du finne Det på GitHub her eller hele prosjektet her.

Du kan følge meg på sosiale @ coderstea På Twitter, Linkedin, Facebook eller Instagram. Vi deler også videoer av høy kvalitet om programmering på Vår Youtube-kanal Du kan også publisere ditt eget innlegg på CodersTea.com, bare del din tanke pa Kontakt oss.

Hva Er Tilkoblingsgruppering?

Tilkoblingsgruppering I JDBC tillater oss å gjenbruke jdbc-tilkoblingen i stedet for å skape hver gang. Når tilkalt det returnerer jdbc-tilkobling som ikke er i bruk (eller opprette en ny hvis den første forespørselen eller pool grensen ennå ikke er nådd). Tenk på det som ressurspooling som skrivere i et delt nettverk ELLER DHCP eller Trådbasseng som vi diskuterte i» Resirkuler Trådene Og Lagre Ressursene med Trådbasseng » – innlegget.

Hvorfor Bruke Tilkoblingsutvalg?

Opprette en forbindelse med databasen er en kostbar prosess. Det tar tid å koble til databasen. Det er ikke merkbart for et par ganger, men gjør det for tusenvis av ganger, selve hyppigheten av søknaden din for å måtte ringe databasene, kan det bli veldig tregt. Anta at det tar 5ms å koble TIL DB og 10 ms for en spørring så rundt 15 ms for første gang. Gjør det for 1000 ganger, og du kan føle forskjellen. Mer enn 30% av tiden er å kaste bort i å skape forbindelsen.

et annet scenario ville anta at tilkoblingen tar 5ms, men spørringen tar bare 4ms, og mer enn 60% går for opprettelse. Du får ideen.

men i forbindelse pooling oppretter du ikke en tilkobling hver gang, i stedet gjenbruker du den. Resirkulering hjelper ikke bare miljøet, men også systemets ytelse. Gjennom denne resirkuleringsressursen reduseres overhead. Du kan begrense antall tilkoblinger også som kan hjelpe i trafikkontroll til databasen. Det er også andre faktorer for å forbedre ytelsen. Du kan lære om dem i min andre artikkel «Hvordan Oppnå Storhet I Jdbc-Ytelse»;

når skal Du bruke Tilkoblingsbasseng?

Ok, Det har mange fordeler, men det kan være scenarier der det ikke er fornuftig å bruke tilkoblingspooling. Jeg tror vi bør bruke det når det er mulig, da det reduserer mye av arbeidet. Slik som automatisk koble til databasen i tilfelle timeout. Det bør være ditt primære valg, hvis søknaden din ofte kaller databasen, eller det er sterkt avhengig av databasen.

for et enkelt program der du ringer databasen en gang i blant som en dag eller noe så har du sannsynligvis ikke trenger det. Eller du kan bare sette bassenggrensen til en slik at det bare vil være en tilkobling i bassenget. I et multithreaded miljø, hvis du vil at alle trådene skal bruke samme tilkobling i stedet for hver tråd for å lage sine EGNE DB-tilkoblinger, er connection pooling frelseren for deg.

Ting Du Må Huske På Når Du Bruker Tilkoblingspooling

En ting du må være forsiktig med å lukke tilkoblingen. Hvis du ikke lukker tilkoblingen etter å ha brukt den, går den ikke tilbake til bassenget. Og en annen del av programmet kan vente på det. Den beste tilnærmingen er å bruke prøve-med-ressurser, som du ser i detalj her. Og du må kanskje forklare din nye kollega / venn om hva, hvorfor og hvordan du bruker tilkoblingsgruppering hvis han eller hun ikke vet. Det er ikke så mye av en stor oppgave siden du bare kan dele dette innlegget med dem bare i tilfelle (egenreklame ?).

Utforsk JDBC Connection Poling Med HikariCP

på dette punktet håper jeg du har forstått hva JDBC connection pooling er, hvorfor og når du skal bruke den, og dens fordeler og ulemper. En ting gjenstår er, hvordan du bruker den. Det kan gjøres veldig enkelt Ved HikariCP og gir mye mer ytelse enn noen annen tilkobling pooling bibliotek. HikariCP er et veldig raskt Og lett Java-tilkoblingsbassengbibliotek der ute. API og generelle kodebase er relativt liten, en stor ting, og svært optimalisert. Det er veldig enkelt å sette opp og bruke.

før du bruker den, la oss gå gjennom forutsetninger.

Legge Til HikariCP I Prosjektet

Det er flere måter Du kan laste HikariCP på prosjektet ditt.

Manuelt Legge HikariCP bibliotek

for vanlig Java-prosjekt, kan du laste ned glasset Fra Maven Repo og laste ned den nyeste ‘HikariCP’. Det er også støtte for eldre Java-versjoner, som lett kan identifiseres på nedlastingssiden.

Legge Til HikariCP Med Build Frameworks

for å bygge rammer, for eksempel Maven eller Gradle, kan du avhengigheter. På tidspunktet for opprettelsen av denne bloggen var 3.4.1 den siste. Vennligst sjekk den nyeste når du bruker den, som finnes På MvnRepository. Det kan gi deg avhengigheter tekst i Både Maven eller Gradle format.

Maven

<!--Java 8 to 11 maven artifact--><dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <!-- use the latest verion if possible. This was the latest on the birth of this blog --> <version>3.4.1</version></dependency><!-- Java 7 maven artifact (maintenance mode) --><dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP-java7</artifactId> <version>2.4.13</version></dependency><!-- Java 6 maven artifact (maintenance mode) --><dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP-java6</artifactId> <version>2.3.13</version></dependency>

Gradle

//Java 8 to 11compile "com.zaxxer:HikariCP:3.4.1"//java 7compile "com.zaxxer:HikariCP-java7:2.4.13"//Java 6compile "com.zaxxer:HikariCP-java6:2.3.13"

Opprette Jdbc-Tilkoblingsbasseng Med HikariCP

Mens Du Oppretter Hikaricp DataSource-objekt, et grensesnitt for Tilkoblingsbasseng levert Av Java, må vi konfigurere bassenget. Dette inkluderer JDBC URL, bruker, passord, pool størrelse blant annet. Følgende er de grunnleggende og vanlige konfigurasjonsinnstillingene og deres beskrivelser.

Metoder Beskrivelser
setJdbcUrl (Streng) Angi JDBC-NETTADRESSEN
setUsername (Streng) Angi Brukernavnet
setPassword (Streng) Angi passordet
setDriverClassName (Streng) Pass driverklassenavnet til det
setMaximumPoolSize (int) maksimal tilkobling som kan opprettes av eller ligger i bassenget
setConnectionTimeout (long) hvor mye tid en bruker kan vente på få en tilkobling fra bassenget. hvis den overskrider fristen, kastes En SQlException
setMaximumPoolSize (int) maksimal tid en tilkobling kan sitte tomgang i bassenget. Hvis den overskrider fristen, fjernes den fra bassenget. Hvis du ikke ønsker å pensjonere tilkoblingene bare sette 0.
setPoolName (String) det setter gjeldende bassengnavn. Dette er valgfritt, du trenger ikke å gjøre det.
Hkari CP Konfigurasjon

Eksempel og Kode For HikariCP

jeg har satt kommentarene for å vise hva det gjør. Jeg har skrevet koden i omvendt rekkefølge for å opprette Config, sende den til datakilden, få tilkoblingen fra datakilden, og til slutt utføre en spørring. La oss se hvordan eksemplet fungerer.

vi kaller statisk getConnection metode for tilkobling. Hvilken getDataSource() for DataSource objekt. Dette objektet getConnection gir oss forbindelsen fra bassenget.

I getDataSource hvisdataSource er null, static DataSource objekt, oppretter vi en med createDataSource Og konfigurerer bassenget med getHikariConfig. I main gjør vi bare noen enkle spørsmål.

import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.time.Duration;public class HikariCP { // static global DataSource object. private static DataSource dataSource; public static void main(String args) { String query = "SELECT COUNT(*) FROM employee"; //Using try-with-resources for auto closing connection, pstmt, and rs. try (Connection connection = getConnection(); PreparedStatement pstmt = connection.prepareStatement(query); ResultSet rs = pstmt.executeQuery(); ) { if (rs.next()) { System.out.println("Total employees are " + rs.getInt(1)); } } catch (SQLException e) { e.printStackTrace(); } } //Call the get connection method. static Connection getConnection() throws SQLException { return getDataSource().getConnection(); } //Get the DataSource. If not available create the new one //It is not threadsafe. I didn't wanted to complicate things. private static DataSource getDataSource() { if (null == dataSource) { System.out.println("No DataSource is available. We will create a new one."); createDataSource(); } return dataSource; } //To create a DataSource and assigning it to variable dataSource. private static void createDataSource() { HikariConfig hikariConfig = getHikariConfig(); System.out.println("Configuration is ready."); System.out.println("Creating the HiakriDataSource and assigning it as the global"); HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); dataSource = hikariDataSource; } //returns HikariConfig containing JDBC connection properties //which will be used by HikariDataSource object. private static HikariConfig getHikariConfig() { System.out.println("Creating the config with HikariConfig with maximum pool size of 5"); HikariConfig hikaConfig = new HikariConfig(); //This is same as passing the Connection info to the DriverManager class. //your jdbc url. in my case it is mysql. hikaConfig.setJdbcUrl("jdbc:mysql://localhost:3306/test"); //username hikaConfig.setUsername("root"); //password hikaConfig.setPassword("IWontTellYouThis ;)"); //driver class name hikaConfig.setDriverClassName("com.mysql.jdbc.Driver"); // Information about the pool //pool name. This is optional you don't have to do it. hikaConfig.setPoolName("MysqlPool-1"); //the maximum connection which can be created by or resides in the pool hikaConfig.setMaximumPoolSize(5); //how much time a user can wait to get a connection from the pool. //if it exceeds the time limit then a SQlException is thrown hikaConfig.setConnectionTimeout(Duration.ofSeconds(30).toMillis()); //The maximum time a connection can sit idle in the pool. // If it exceeds the time limit it is removed form the pool. // If you don't want to retire the connections simply put 0. hikaConfig.setIdleTimeout(Duration.ofMinutes(2).toMillis()); return hikaConfig; }}

Opprett Flere Databasetilkoblingsutvalg

det er flere grunner til at du må få tilgang til flere databaser i et enkelt prosjekt eller kodebase. Det vanligste er å migrere dataene fra en server til en annen, eller det er et arkitektonisk krav. Uansett hva årsaken er, øyeblikket du må gjøre det samme arbeidet, har du en tendens til å kopiere og lime inn koden, OG JDBC er i seg selv en definisjon av standardkode.

Alle detaljer om å opprette en multi-database tilkobling pool er beskrevet i dette innlegget: hvordan lage En Multi-Database Pool I HikariCP

Multi-Database HikariCP pool code tar sikte på å redusere standardtekst kode til et minimum, noe som gir deg en liten og lesbar kode.

Konklusjon

i dette innlegget snakket vi om hva som er tilkobling, hvorfor du bruker det, og når du skal bruke det. Det forbedrer ytelsen til database heavy application, men det kan forbedres ytterligere med noen triks i mitt andre innlegg «Hvordan Oppnå Storhet I JDBC Performance». Vi undersøker hvordan du bruker tilkoblingspooling ved Hjelp Av HikariCP, det raskeste og lette tilkoblingsbassengbiblioteket for java når du skriver dette innlegget. Du kan finne koden til eksemplet på GitHub her eller hele prosjektet her.

Posted on

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.