1.HikariCP特點
- 1、位元組碼精簡:優化程式碼,直到編譯後的位元組碼最少,這樣,CPU快取可以載入更多的程式程式碼;
- 2、優化代理和攔截器:減少程式碼,例如HikariCP的Statement proxy只有100行程式碼,只有BoneCP的十分之一;
- 3、自定義陣列型別(FastStatementList)代替ArrayList:避免每次get()呼叫都要進行range check,避免呼叫remove()時的從頭到尾的掃描;
- 4、自定義集合型別(ConcurrentBag):提高併發讀寫的效率;
- 5、其他針對BoneCP缺陷的優化,比如對於耗時超過一個CPU時間片的方法呼叫的研究(但沒說具體怎麼優化)。
2.HikariCP相關地址
3.HikariCP連線配置
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
- Java 9 Early Access maven artifact:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java9ea</artifactId>
<version>2.6.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>
<!-- Hikari Datasource -->
<bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown">
<!-- <property name="driverClassName" value="${db.driverClass}" /> --> <!-- 無需指定,除非系統無法自動識別 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<!-- 連線只讀資料庫時配置為true, 保證安全 -->
<property name="readOnly" value="false" />
<!-- 等待連線池分配連線的最大時長(毫秒),超過這個時長還沒可用的連線則發生SQLException, 預設:30秒 -->
<property name="connectionTimeout" value="30000" />
<!-- 一個連線idle狀態的最大時長(毫秒),超時則被釋放(retired),預設:10分鐘 -->
<property name="idleTimeout" value="600000" />
<!-- 一個連線的生命時長(毫秒),超時而且沒被使用則被釋放(retired),預設:30分鐘,建議設定比資料庫超時時長少30秒,參考MySQL wait_timeout引數(show variables like '%timeout%';) -->
<property name="maxLifetime" value="1800000" />
<!-- 連線池中允許的最大連線數。預設值:10;推薦的公式:((core_count * 2) + effective_spindle_count) -->
<property name="maximumPoolSize" value="15" />
</bean>
4.資料庫連線對比
5.待完善功能