開胃菜:據說hikari連接池很快,快到讓另一個連接池的作者拋棄對自己連接池的維護,並且強烈推薦使用hikari
連接池目前我們項目使用的有兩個 一個是Druid , 一個是 Hikari,
其中Druid關注的是連接池中連接的監控作用,而Hikari注重的是連接池中連接的創建和回收的速度,因此Hikari會有更高的效率
Druid的配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> 初始化連接大小 <property name="initialSize" value="${initialSize}"></property> 連接池最大數量 <property name="maxActive" value="${maxActive}"></property> 連接池最小空閑 <property name="minIdle" value="${minIdle}"></property> 獲取連接最大等待時間 <property name="maxWait" value="${maxWait}"></property> <property name="filters" value="stat,config" /> <property name="connectionProperties" value="config.decrypt=true" /> </bean>
Hikari的配置:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> <!-- 無需指定,除非系統無法自動識別 --> <property name="jdbcUrl" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 連接只讀數據庫時配置為true, 保證安全 --> <property name="readOnly" value="false" /> <!-- 等待連接池分配連接的最大時長(毫秒),超過這個時長還沒可用的連接則發生SQLException, 缺省:30秒 --> <property name="connectionTimeout" value="30000" /> <!-- 一個連接idle狀態的最大時長(毫秒),超時則被釋放(retired),缺省:10分鍾 --> <property name="idleTimeout" value="60000" /> <!-- 一個連接的生命時長(毫秒),超時而且沒被使用則被釋放(retired),缺省:30分鍾,建議設置比數據庫超時時長少30秒,參考MySQL wait_timeout參數(show variables like '%timeout%';) --> <property name="maxLifetime" value="1800000" /> <!-- idleTimeout只有在minimumIdle設置為小於maximumPoolSize的情況下才生效 --> <property name="minimumIdle" value="10" /> <!-- 連接池中允許的最大連接數。缺省值:10;推薦的公式:((core_count * 2) + effective_spindle_count) --> <property name="maximumPoolSize" value="15" /> </bean>
以上兩個都是同事琢磨出來的配置,僅供參考吧。
還有一個就是Hikari在spring-boot中的配置
spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://xx.xx.xx.xx:3306/xx?characterEncoding=UTF-8&useUnicode=true&autoReconnect=true&useCursorFetch=true&defaultFetchSize=100&serverTimezone=UTC username: root password: root hikari: minimum-idle: 5 idle-timeout: 600000 auto-commit: true pool-name: Hikari Pool max-lifetime: 1800000 connection-timeout: 30000 connection-test-query: Select 1
就這些了,只是做個記錄