Vizualizări Post: 2,227

Hei, iubitorii de ceai!. Ați auzit vreodată despre punerea în comun a conexiunilor în JDBC sau HikariCP? Dacă nu, nu vă faceți griji deloc, despre asta este vorba în acest post. Vom vorbi despre toate lucrurile despre JDBC connection pool și implementarea acestuia folosind HikariCP.

HikariCP este una dintre cele mai rapide conexiuni disponibile pe piață pentru conexiunea JDBC. Se face punerea în comun de conectare foarte ușor. pregătește-te să afli mai multe despre această fiară. Dar înainte, fă-ți ceaiul să sorbi și să înveți. Și pentru exemplul folosit în postare, îl puteți găsi pe GitHub aici sau proiectul complet aici.

puteți să mă urmăriți pe social @ coderstea pe Twitter, Linkedin, Facebook sau Instagram. De asemenea, împărtășim videoclipuri de înaltă calitate despre programare pe canalul nostru Youtube puteți publica și propria postare pe CodersTea.com, doar împărtășiți-vă gândul la Contactați-Ne.

ce este punerea în comun a conexiunilor?

punerea în comun a conexiunilor în JDBC ne permite să reutilizăm conexiunea JDBC mai degrabă decât să creăm de fiecare dată. Când este apelat, returnează conexiunea JDBC care nu este utilizată( sau creează una nouă dacă prima sa cerere sau limita de piscină nu este încă atinsă). Gândiți-vă la aceasta ca la punerea în comun a resurselor, cum ar fi imprimantele într-o rețea partajată sau DHCP sau Thread Pool despre care am discutat în postarea „reciclați firele și salvați resursele cu Thread Pool”.

De Ce Să Folosiți Piscina De Conectare?

crearea unei conexiuni cu baza de date este un proces costisitor. Este nevoie de timp pentru a vă conecta la baza de date. Nu este vizibil de câteva ori, dar făcând acest lucru de mii de ori, chiar frecvența aplicației dvs. pentru necesitatea de a apela bazele de date, poate deveni foarte lentă. Să presupunem că este nevoie de 5 ms pentru a vă conecta la DB și 10 ms pentru o interogare, deci în jur de 15 ms pentru prima dată. Fă-o de 1000 de ori și poți simți diferența. Mai mult de 30% din timp se pierde în crearea conexiunii.

un alt scenariu ar fi, să presupunem că conexiunea ia 5ms, dar interogarea ia doar 4ms, apoi mai mult de 60% merge pentru creație. Ai prins ideea.

dar în punerea în comun a conexiunilor, nu creați o conexiune de fiecare dată, în schimb, o reutilizați. Reciclarea ajută nu numai mediul, ci și performanța sistemului nostru. Prin această resursă de reciclare scade aeriene. Puteți limita numărul de conexiuni, precum și care pot ajuta la controlul traficului la baza de date. Există și alți factori pentru îmbunătățirea performanței. Puteți afla despre cele din celălalt articol al meu”Cum să obțineți măreția în performanța JDBC”;

când să utilizați piscina de conectare?

Ok, are o mulțime de avantaje, dar ar putea exista scenarii în care nu are sens să folosești punerea în comun a conexiunilor. Cred că ar trebui să o folosim ori de câte ori este posibil, deoarece reduce o mare parte din muncă. Cum ar fi conectarea automată la baza de date în caz de expirare. Ar trebui să fie alegerea dvs. principală, în cazul în care aplicația dvs. apelează frecvent baza de date sau depinde în mare măsură de baza de date.

pentru o aplicație simplă în care apelați baza de date din când în când ca o zi sau ceva, probabil că nu aveți nevoie de ea. Sau puteți seta limita piscinei la una, astfel încât să existe o singură conexiune în piscină. Într-un mediu multithreaded, dacă doriți ca toate firele să utilizeze aceeași conexiune în loc de fiecare fir pentru a crea propriile conexiuni DB, punerea în comun a conexiunilor este salvatorul pentru dvs.

lucruri de care trebuie să țineți cont atunci când utilizați punerea în comun a conexiunilor

un lucru trebuie să fiți atenți la închiderea conexiunii. Dacă nu închideți conexiunea după ce ați folosit-o, nu se va întoarce la piscină. Și o altă parte a programului dvs. ar putea fi de așteptare pentru ea. Cea mai bună abordare este utilizarea resurselor de încercare, pe care le vedeți în detaliu aici. Și s-ar putea să trebuiască să-i explici noului tău coleg/ prieten despre ce, de ce și cum să folosești punerea în comun a conexiunilor dacă el sau ea nu știe. Aceasta nu este o sarcină atât de mare, deoarece puteți împărtăși această postare cu ei doar în caz (auto-promovare ?).

Exploreaza JDBC conexiune Poling cu HikariCP

în acest moment, sper că ați înțeles ce JDBC conexiune pooling este, de ce și când să-l folosească, și avantajele și dezavantajele sale. Un lucru rămâne este, cum să-l folosească. Se poate face foarte ușor de HikariCP și oferă performanțe mult mai mult decât orice altă bibliotecă de punere în comun conexiune. HikariCP este un foarte rapid și ușor bibliotecă piscină conexiune Java acolo. API-ul și baza de cod generală sunt relativ mici, un lucru minunat și foarte optimizate. Este foarte ușor de configurat și de utilizat.

înainte de ao folosi, să trecem prin condiții prealabile.

adăugarea HikariCP în proiectul dvs.

există mai multe moduri în care puteți încărca HikariCP pe proiectul dvs.

adăugând manual biblioteca HikariCP

pentru plain Java project, puteți descărca jar de la Maven Repo și descărca cele mai recente ‘HikariCP’. Există suport și pentru versiunile Java mai vechi, care pot fi identificate cu ușurință pe pagina de descărcare.

adăugarea HikariCP cu cadre construi

pentru a construi cadre, cum ar fi Maven sau Gradle puteți dependențe. La momentul creării acestui blog, 3.4.1 a fost cel mai recent. Vă rugăm să verificați cel mai recent atunci când îl utilizați, care poate fi găsit pe MvnRepository. Acesta vă poate oferi dependențe text atât în format Maven sau Gradle.

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"

crearea Pool conexiune JDBC cu HikariCP

în timp ce crearea obiectului Hikaricp DataSource, o interfață pentru piscina conexiune furnizate de Java, avem nevoie pentru a configura piscina. Aceasta include URL-ul JDBC, utilizatorul, parola, dimensiunea piscinei, printre altele. Următoarele sunt setările esențiale și comune de configurare și descrierile acestora.

metode Descrepții
setJdbcUrl (String) setați URL-ul JDBC
setUsername(String) Setați numele de utilizator
setPassword (String) setați parola
setDriverClassName (String) treceți numele clasei de driver la acesta
setMaximumPoolSize(int) conexiunea maximă care poate fi creată de sau se află în piscină
setConnectionTimeout (lung) cât de mult timp un utilizator poate aștepta să obțineți o conexiune de la piscină. în cazul în care depășește limita de timp, atunci un SQlException este aruncat
setMaximumPoolSize (int) timpul maxim o conexiune poate sta inactiv în piscină. Dacă depășește limita de timp, este scos din piscină. Dacă nu doriți să vă retrageți conexiunile pur și simplu puneți 0.
setPoolName (String) acesta stabilește numele curent piscină. Acest lucru este opțional, nu trebuie să o faceți.
Hkari CP Configuration

exemplu și cod pentru HikariCP

am pus comentariile pentru a arăta exact ce face. Am scris codul în ordinea inversă a creării configurației, trecând-o la sursa de date, obținând conexiunea de la sursa de date și, în final, executând o interogare. Să vedem cum funcționează exemplul.

numim metoda statică getConnection pentru o conexiune. Care getDataSource() pentru DataSource obiect. Aceste obiecte getConnection ne oferă conexiunea din piscină.

în getDataSource dacă dataSource este null,static DataSource obiect, atunci vom crea unul cu createDataSourceși configurarea piscina cu getHikariConfig. În main facem doar câteva întrebări simple.

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; }}

Creare grup de conexiuni Multi-baze de date

există mai multe motive pentru care trebuie să accesați mai multe baze de date într-un singur proiect sau codebase. Cel mai frecvent este migrarea datelor de la un server la altul sau este o cerință arhitecturală. Oricare ar fi motivul, în momentul în care trebuie să faceți aceeași lucrare, aveți tendința de a copia-lipi codul, iar JDBC este în sine o definiție a codului boilerplate.

toate detaliile despre crearea unui pool de conexiuni multi-bază de date sunt descrise în acest post: Cum se creează un Pool Multi-bază de date în HikariCP

Codul Pool Hikaricp Multi-bază de date își propune să reducă codul boilerplate la un nivel minim, oferindu-vă un cod mic și ușor de citit.

concluzie

în acest post, am vorbit despre ceea ce este punerea în comun a conexiunilor, de ce să o folosim și când să o folosim. Îmbunătățește foarte mult performanța aplicației grele a bazei de date, dar poate fi îmbunătățită în continuare cu câteva trucuri din cealaltă postare a mea „Cum să obții măreție în performanța JDBC”. Explorăm modul de utilizare a punerii în comun a conexiunilor cu ajutorul HikariCP, cea mai rapidă și ușoară bibliotecă de conexiuni pentru java la momentul scrierii acestui post. Puteți găsi codul exemplului pe GitHub aici sau proiectul complet aici.

Posted on

Lasă un răspuns

Adresa ta de email nu va fi publicată.