druid和HikariCP

今天爲了優化springmvc中的數據連接池,就去查了下一些數據連接池的性能。結果如下:
1:性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益於最大限度的避免鎖競爭。
2:druid功能最爲全面,sql攔截等功能,統計數據較爲全面,具有良好的擴展性。
3:綜合性能,擴展性等方面,可考慮使用druid或者hikariCP連接池。
4:可開啓prepareStatement緩存,對性能會有大概20%的提升。
那麼久着重講下hikariCP 和 druid。hikariCP是速度最快的,而且不是快一兩點。那麼就來了解下在項目(maven+springMVC)中的使用:

<!-- 在pom.xml中的依賴 -->
<!-- Hikari 數據庫連接池依賴 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>2.6.0</version>
        </dependency>
<!-- 配置在spring.xml(或者叫applicationContext.xml等不同意習慣不一) -->
<!-- 引入外部文件 -->
    <context:property-placeholder location="classpath:db.properties" />

<!-- Hikari Datasource 速度最快數據連接池 -->
    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.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="60" />
        <property name="minimumIdle" value="10" />
    </bean>

<!-- 剩下的配置和dbcp2,c3p0一樣 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.zm.blog.entity" />
        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" />
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="xxx.xxx.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

做完以上步驟就能使用HikariCP了,druid配置是一樣的類似的。這裏說下我們公司用的是druid,就是看重它全面。

<!-- 阿里 druid數據連接池依賴 配置於pom.xml-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.2</version>
        </dependency>
<!-- druid 阿里數據庫連接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <!-- 基本屬性 url、user、password -->
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

        <!-- 配置監控統計攔截的filters -->
        <property name="filters" value="stat" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="maxActive" value="20" />
        <property name="initialSize" value="1" />
        <property name="minIdle" value="1" />

        <!-- 配置獲取連接等待超時的時間 -->
        <property name="maxWait" value="60000" />

        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 打開PSCache,並且指定每個連接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxOpenPreparedStatements" value="20" />
    </bean>
    <!-- 剩下的請參照上馬代碼 -->
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章