Bevezetés a HikariCP-be

1. Áttekintés

Ebben a bevezető cikkben megismerhetjük a HikariCP JDBC kapcsolatkészlet projektjét. Ez egy nagyon könnyű (nagyjából 130Kb-os) és villámgyors JDBC csatlakozási pooling keret Brett Wooldridge fejlesztette 2012 körül.

2. Bevezetés

Számos összehasonlító eredmény érhető el a HikariCP teljesítményének összehasonlításához más csatlakozási pooling keretrendszerekkel, például c3p0, dbcp2, kandúr, és vibur. Például a HikariCP csapata referenciaértékek alatt tett közzé (eredeti eredmények itt érhetők el):

A keretrendszer olyan gyors, mert a következő technikákat alkalmazták:

  • Bytecode szintű mérnöki munka - készült néhány extrém bytecode szintű mérnöki munka (beleértve a szerelési szintű natív kódolást is)
  • Mikro-optimalizációk - bár alig mérhetőek, ezek az optimalizációk együttesen növelik az általános teljesítményt
  • A gyűjtemény keretrendszer intelligens használata - a Tömb lista egyéni osztályra cserélték FastList ez kiküszöböli a hatótávolság-ellenőrzést, és eltávolítási vizsgálatokat végez a farkától a fejig

3. Maven-függőség

Készítsünk egy minta alkalmazást a használatának kiemelésére. A HikariCP támogatja a JVM összes fő verzióját. Minden verzió megköveteli a függőségét; Java 8-tól 11-ig:

 com.zaxxer HikariCP 3.4.5 

A régebbi JDK verziók, például a 6-os és a 7-es is támogatottak. A megfelelő verziók itt és itt találhatók. A legújabb verziókat a Central Maven Repository-ban is ellenőrizhetjük.

4. Használat

Hozzunk létre most egy bemutató alkalmazást. Felhívjuk figyelmét, hogy be kell illesztenünk egy megfelelő JDBC illesztőprogram osztályfüggőséget a pom.xml. Ha nincsenek megadva függőségek, akkor az alkalmazás a-t dob ClassNotFoundException.

4.1. A. Létrehozása Adatforrás

A HikariCP-ket fogjuk használni Adatforrás az adatforrás egyetlen példányának létrehozásához alkalmazásunkhoz:

public class DataSource {privát statikus HikariConfig config = új HikariConfig (); privát statikus HikariDataSource ds; statikus {config.setJdbcUrl ("jdbc_url"); config.setUsername ("adatbázis_felhasználónév"); config.setPassword ("adatbázis_jelszó"); config.addDataSourceProperty ("cachePrepStmts", "true"); config.addDataSourceProperty ("prepStmtCacheSize", "250"); config.addDataSourceProperty ("prepStmtCacheSqlLimit", "2048"); ds = új HikariDataSource (config); } private DataSource () {} public static Connection getConnection () dobja az SQLException {return ds.getConnection () -t; }}

Megjegyzendő itt az inicializálás a statikus Blokk.

A HikariConfig az adatforrás inicializálásához használt konfigurációs osztály. Négy jól ismert, kötelező must-paraméterrel érkezik felhasználónév, Jelszó, jdbcUrl, dataSourceClassName.

Kívül jdbcUrl és dataSourceClassName, egyiket egyszerre kell használni. Ha azonban ezt a tulajdonságot régebbi illesztőprogramokkal használjuk, előfordulhat, hogy mindkét tulajdonságot be kell állítanunk.

Ezen tulajdonságok mellett számos más tulajdonság is rendelkezésre áll, amelyeket nem feltétlenül kínálnak más pooling keretrendszerek:

  • autoCommit
  • kapcsolat időtúllépés
  • tétlenségi időtúllépés
  • maxLifetime
  • connectionTestQuery
  • connectionInitSql
  • validationTimeout
  • maximumPoolSize
  • poolName
  • allowPoolSuspension
  • csak olvasható
  • ügyletIsolation
  • leakDetectionThreshold

A HikariCP ezen adatbázis-tulajdonságok miatt tűnik ki. Elég fejlett ahhoz, hogy önmagában is észlelje a csatlakozási szivárgást!

Ezen tulajdonságok részletes leírása itt található.

Inicializálhatjuk is HikariConfig egy tulajdonságfájllal a erőforrások Könyvtár:

privát statikus HikariConfig config = new HikariConfig ("datasource.properties");

A tulajdonságfájlnak ilyennek kell kinéznie:

dataSourceClassName = // TBD dataSource.user = // TBD // egyéb tulajdonságok neve a dataSource-szal kezdődik, a fentiek szerint

Tudjuk használni java.util.Properties-alapú konfiguráció is:

Tulajdonságok kellékei = új Tulajdonságok (); props.setProperty ("dataSourceClassName", // TBD); props.setProperty ("dataSource.user", // TBD); // más szükséges tulajdonságok beállítása privát statikus HikariConfig config = new HikariConfig (props);

Alternatív megoldásként közvetlenül inicializálhatunk egy adatforrást:

ds.setJdbcUrl (// TBD); ds.setUsername (// TBD); ds.setPassword (// TBD);

4.2. Adatforrás használata

Most, hogy meghatároztuk az adatforrást, felhasználhatjuk arra, hogy kapcsolatot szerezzünk a konfigurált kapcsolatkészletből, és elvégezhessük a JDBC-vel kapcsolatos műveleteket.

Tegyük fel, hogy van két megnevezett táblánk adósság és emp egy alkalmazott-osztály felhasználási eset szimulálására. Osztályt írunk, hogy a HikariCP használatával lehívjuk ezeket a részleteket az adatbázisból.

Az alábbiakban felsoroljuk a minta adatok létrehozásához szükséges SQL utasításokat:

tábla dept létrehozása (deptno numeric, dname varchar (14), loc varchar (13), kényszer pk_dept primer kulcs (deptno)); tábla emp létrehozása (empno numeric, ename varchar (10), job varchar (9), mgr numeric, bérleti dátum, sal numeric, comm numeric, deptno numeric, kényszer pk_emp primer kulcs (empno), kényszer fk_deptno idegen kulcs (deptno) oszt (deptno)); beillesztés a tanszéki értékekbe (10, „SZÁMVITEL”, „NEW YORK”); illessze be a részlegértékekbe (20, „KUTATÁS”, „DALLAS”); illessze be a részlegértékekbe (30, „ÉRTÉKESÍTÉS”, „CHICAGO”); beszúrás a részlegértékekbe (40, 'MŰVELETEK', 'BOSTON'); beillesztés az emp értékekbe (7839, 'KING', 'PRESIDENT', null, to_date ('17 -11-1981 ',' dd-mm-yyyy '), 7698, null, 10); beszúrás az emp értékekbe (7698, 'BLAKE', 'MANAGER', 7839, to_date ('1-5-1981', 'éééé-hh-ééé'), 7782, null, 20); beillesztés az emp értékekbe (7782, 'CLARK', 'MANAGER', 7839, to_date ('9-6-1981', 'dd-mm-yyyy'), 7566, null, 30); beszúrás az emp értékekbe (7566, 'JONES', 'MANAGER', 7839, to_date ('2-4-1981', 'éééé-hh-ééé'), 7839, null, 40);

Felhívjuk figyelmét, hogy ha memóriában lévő adatbázist használunk, például H2, akkor automatikusan be kell töltenünk az adatbázis szkriptet, mielőtt a tényleges kódot futtatnánk az adatok lekéréséhez. Szerencsére a H2 egy BENNE paraméter, amely futás közben képes betölteni az adatbázis parancsfájlt az osztályútvonalról. A JDBC URL-nek a következőképpen kell kinéznie:

jdbc: h2: mem: test; DB_CLOSE_DELAY = -1; INIT = runcript a 'classpath: /db.sql'

Létre kell hoznunk egy módszert ezen adatok lekérésére az adatbázisból:

public static list A fetchData () dobja az SQLException parancsot {String SQL_QUERY = "select * from emp"; Lista alkalmazottak = null; próbálkozzon (Connection con = DataSource.getConnection (); PreparedStatement pst = con.prepareStatement (SQL_QUERY); ResultSet rs = pst.executeQuery ();) {alkalmazottak = new ArrayList (); Alkalmazott alkalmazott; while (rs.next ()) {alkalmazott = új alkalmazott (); alkalmazott.setEmpNo (rs.getInt ("empno")); worker.setEname (rs.getString ("ename")); worker.setJob (rs.getString ("munka")); worker.setMgr (rs.getInt ("mgr")); alkalmazott.setHiredate (rs.getDate ("bérelt")); alkalmazott.setSal (rs.getInt ("sal")); worker.setComm (rs.getInt ("comm")); alkalmazott.setDeptno (rs.getInt ("deptno")); alkalmazottak.add (alkalmazott); }} visszatérő alkalmazottak; }

A teszteléshez létre kell hoznunk egy JUnit-módszert. Mivel tudjuk a táblázat sorainak számát emp, számíthatunk arra, hogy a visszaküldött lista mérete megegyezik a sorok számával:

@Test public void givenConnection_thenFetchDbData () dobja az SQLException {HikariCPDemo.fetchData (); assertEquals (4, alkalmazottak.méret ()); }

5. Következtetés

Ebben a gyors bemutatóban megismerhettük a HikariCP használatának előnyeit és konfigurációját.

Mint mindig, a teljes forráskód elérhető a GitHubon.