Spring框架中獲取連接池的幾種方式


什么是數據庫連接池?

     數據庫連接池是一種關鍵的有限的昂貴的資源,對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池就是用來解決這些問題而提出的。

     數據庫連接池負責分配、管理和釋放數據庫連接。實際應用中,頻繁的連接和關閉數據庫,將會產生極大的消耗,影響應用的性能,造成不必要的資源浪費。連接池會預先創建一部分數據庫連接以便使用,同時允許應用程序重復使用一個現有的數據庫連接。數據庫連接池創建的時候設置連接池最小和最大連接數,最小連接數即為,不管該連接是否被使用,都會預先創建。如果連接使用超出最小連接數,會在創建一個數據庫連接。最大連接數為該連接池能承載的最大連接數量,如果超出這個數,后面的數據庫連接請求將會進入等待隊列。超出最小連接數而創建的連接使用結束后,不會被立馬釋放,而是會被放在連接池中等待被重復使用,或者等超出空閑時間后被釋放。

連接方式:

   1.DBCP數據源:

    (數據源:連接數據庫所需的類和參數)

    DBCP配置Mysql數據源(通常是寫在mybatis的配置文件中):

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    
    <!--initialSize: 初始化連接--> 
    <property name="initialSize" value="5"/> 
    <!--maxIdle: 最大空閑連接--> 
    <property name="maxIdle" value="10"/> 
    <!--minIdle: 最小空閑連接--> 
    <property name="minIdle" value="5"/> 
    <!--maxActive: 最大連接數量--> 
    <property name="maxActive" value="15"/>
    
    <!--removeAbandoned: 是否自動回收超時連接--> 
    <property name="removeAbandoned" value="true"/> 
    <!--removeAbandonedTimeout: 超時時間(以秒數為單位)--> 
    <property name="removeAbandonedTimeout" value="180"/> 
    <!--maxWait: 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒--> 
    <property name="maxWait" value="3000"/> 
    <!-- 在空閑連接回收器執行周期(毫秒) -->
    <property name="timeBetweenEvictionRunsMillis" value="10000"/>
    <!--  在每次空閑連接回收器線程(如果有)運行時檢查的連接數量 -->
    <property name="numTestsPerEvictionRun" value="10"/>
    <!-- 最小空閑時間-->
    <property name="minEvictableIdleTimeMillis" value="10000"/>
    <!-- 驗證鏈接是否有效的sql語句 -->
    <property name="validationQuery" value="select 1" />
    <!-- 獲取鏈接之前是否測試鏈接的可用性 -->
    <property name="testOnBorrow" value="true"/> 
</bean> 

   2.C3P0數據源:

      C3P0是一個開源的JDBC數據源實現項目,依賴包:c3p0-0.9.0.4.jar,xml中配置方式與DBCP類似,此處不再贅述。

   3.Spring的數據源實現類 DriverManagerDataSource:

     這是Spring本身提供的一個簡單的數據源實現類,它位於org.springframework.jdbc.datasource接口中。該類實現接口javax.sql.DataSource接口,但是它並沒有提供池化的連接機制,每次調用getConnection()獲取新連接時,只是簡單的創建一個新的連接。因此這個數據源類比較適合在單元測試或簡單的獨立應用中使用,因為它不需要添加額外的依賴類。

<bean id="driverManagerDateSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql:///dstest" />
        <property name="username" value="root" />
        <property name="password" value="root"></property>
    </bean>
    <!-- 獲取該對象調用execute方法,可以執行sql語句 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="driverManagerDateSource"></property>
    </bean>

    4.獲取JNDI數據源:

       如果應用部署在高性能的應用服務器上(eg:weblogic、websohere等),我們希望使用應用服務器本身提供的數據源。應用服務器使用JNDI開放調用者使用,Spring專門為此提供引用JNDI資源的JndiObjectFactoryBean類。

 

寫在最后:本人的第一篇技術博客,留個紀念^_^,如有問題之處,還望多多指正~~感謝大家支持~ 希望以后一起學習,一起進步!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM