數據庫鏈接池:Druid

Java鏈接數據庫方法概述

java.sql提供了一些接口和類,用於支持數據庫增刪改查等相關操做。該jar包定義了java訪問各類不一樣數據庫(mysql,oracle,sqlserver...)的統一接口和標準。同時,各個數據庫廠商都提供了各個接口的實現類,稱之爲「jdbc driver」。
 
一、使用java.sql API
     利用該包提供的各類接口和類直接訪問數據庫。
 
二、使用數據庫鏈接池
目前存在多個開源的java數據庫鏈接池,這些鏈接池都是在java.sql基礎上編寫而成。
1)鏈接池的解決的問題是:
  當使用java.sql中提供的api建立數據庫鏈接時候,須要耗費很大的資源。若是在程序中,每次須要訪問數據庫時候,都進行數據庫鏈接,那麼勢必會形成性能低下;同時,若是用戶失誤忘記釋放數據庫鏈接,會致使資源的浪費等。而數據庫鏈接池就是解決該問題,經過管理鏈接池中的多個鏈接對象(connection),實現connection重複利用。從而,大大提升了數據庫鏈接方面的性能。
2)鏈接池的功能是:
  負責建立、管理、釋放、分配數據庫鏈接即(connection)。
  首先,負責建立相應數目的數據庫鏈接對象(connection)對象,並存放到數據庫鏈接池(connect pool)中。當用戶請求數據庫鏈接時,該鏈接池負責分配某個處於空閒狀態的數據庫鏈接對象;當用戶發出釋放該數據庫鏈接時,該鏈接池負責將該鏈接對象從新設置爲空閒狀態,以便被別的請求重複利用。同時;數據庫鏈接池負責檢查(空閒時間>最大空閒時間)的數據庫鏈接,並釋放。
3)鏈接池主要參數介紹
  最小鏈接數:初始化時,系統將負責建立該數目的connection放入鏈接池中。
  最大鏈接數:系統容許建立connection的最大數值。當系統請求鏈接時候,且鏈接池中不存在空閒的鏈接:若是connection總數未超過最大鏈接數,那麼鏈接池負責建立新的connection對象,並返回該對象;若是connection總數已經到達該最大鏈接數,那麼鏈接池將用戶請求轉入等待隊列。
 
 
經常使用的數據庫鏈接池:
一、 JNDI
二、 C3p0
三、 Apache 的Jakarta DBCP
四、 BoneCP
其中C3po、Jakarta DBCP、BoneCP是開源的數據庫鏈接池,更多開源的數據庫鏈接處: http://www.open-open.com/20.htm
JNDI數據源是由相應的web服務器(例如:tomcat,weblogic,websphere)負責初始化,建立,管理。程序中不須要引入特別的jar包。
 

JDBC鏈接池、監控組件: Druid

Druid是目前最好的數據庫鏈接池,在功能、性能、擴展性方面,都超過其餘數據庫鏈接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

Druid已經在阿里巴巴部署了超過600個應用,通過一年多生產環境大規模部署的嚴苛考驗。java

Druid是一個JDBC組件,它包括三個部分:mysql

  • 基於Filter-Chain模式的插件體系。
  • DruidDataSource 高效可管理的數據庫鏈接池。
  • SQLParser

Druid能夠作什麼?web

  1. 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫鏈接池。
  2. 能夠監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,可以詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。
  3. 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是很差的行爲,容易致使安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
  4. SQL執行日誌,Druid提供了不一樣的LogFilter,可以支持Common-Logging、Log4j和JdkLog,你能夠按須要選擇相應的LogFilter,監控你應用的數據庫訪問狀況。
  5. 擴展JDBC,若是你要對JDBC層有編程的需求,能夠經過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。
DruidDataSource配置
DruidDataSource大部分屬性都是參考DBCP的,若是你原來就是使用DBCP,遷移是十分方便的。
參考配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />
     
    <property name="filters" value="stat" />
 
    <property name="maxActive" value="20" />
    <property name="initialSize" value="1" />
    <property name="maxWait" value="60000" />
    <property name="minIdle" value="1" />
 
    <property name="timeBetweenEvictionRunsMillis" value="3000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />
 
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
     
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
</bean>

在上面的配置中,一般你須要配置url、username、password,maxActive這三項。sql

Mysql配置示例:
<bean id="dataSource-mysql" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="jdbc:mysql://192.168.1.100/druid-test" />
    <property name="username" value="admin" />
    <property name="password" value="adminpassword" />
    <property name="initialSize" value="1" />
    <property name="maxActive" value="20" />
</bean>

 

參考:http://blog.csdn.net/itwit/article/details/7028135數據庫

參考:http://code.alibabatech.com/wiki/display/Druid/Home編程

相關文章
相關標籤/搜索