springjdbc:數據源


在項目中經常會需要連接數據庫,可以使用的數據庫有很多,平時我們還用連接池來管理數據庫,現在學習了spring,我們知道了,spring的核心功能就是對象創建依賴注入

而我們在使用連接池時,連接對象也是通過DataSource接口獲取的,那么怎樣使用spring來注入數據庫連接信息呢?

學習了spring之后,我們可以將數據庫連接對象Connection的創建和關閉交給spring來管理

在spring中默認提供了很多種數據庫連接

1.DriverMangerDataSource  spring自帶數據源

2.DBCP數據源

3.C3P0數據源

4.JNDI數據源

這四種都是spring默認的數據庫連接,不過我們平時使用的比較多的還是阿里的druid連接池

下面依次介紹這幾種數據源

為了方便我們使用.properties文件來配置連接池信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=123456

1.DriverMangerDataSource

這是spring自帶的數據源,它與之前我們使用jdbc創建連接對象時使用的DriverManger一樣,只能創建一個對象,不支持連接池

2.DBCP數據源

dbcp數據源依賴兩個jar包:

commons-dbcp.jar,commons-pool.jar
<!--配置dbcp連接池-->
    <!--BasicDataSource提供了close()方法關閉數據源,所以必須設定destroy-method=”close”屬性, 
    以便Spring容器關閉時,數據源能夠正常關閉。-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--設置連接池屬性-->
        <!--設置初始連接數-->
        <property name="initialSize" value="10"/>
        <!--最大連接數-->
        <property name="maxActive" value="15"/>
        <!--maxActive:最大連接數據庫連接數,設置為0時,表示沒有限制;-->
        <property name="maxWait" value="60000"/>
        <!--defaultAutoCommit:設置從數據源中返回的連接是否采用自動提交機制,默認值為 true;-->
        <property name="defaultAutoCommit" value="true"/>
        <!--defaultReadOnly:設置數據源是否僅能執行只讀操作, 默認值為 false;-->
        <property name="defaultReadOnly" value="false"/>
        <!--maxIdle:最大等待連接中的數量,設置為0時,表示沒有限制;-->
        <property name="maxIdle" value="15"/>
        <!--validationQuery:用於驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據,
        如你可以簡單地設置為:“select count(*) from emp”;-->
        <property name="validationQuery" value="select count(*) from emp"/>
        <!--removeAbandoned:是否自我中斷,默認是 false;-->
        <property name="removeAbandoned" value="false"/>
        <!--removeAbandonedTimeout:幾秒后數據連接會自動斷開,在removeAbandoned為true,提供該值;-->
        <!--<property name="removeAbandonedTimeout" value=""/>-->
        <!--logAbandoned:是否記錄中斷事件, 默認為 false;-->
        <property name="logAbandoned" value="false"/>
    </bean>

3.C3P0數據源

c3p0是一個開源的jdbc數據源實現項目,依賴於c3p0.jar

  <bean id="dataSource" class="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource" destroy-method="close">
        <!--內部屬性與dbcp一樣-->
    </bean>

4.JNDI數據源

JNDI:Java命名和目錄的服務接口

作用:將一些資源(數據源),以目錄的形式提供給程序訪問

如果應用配置在高性能的應用服務器(如WebLogic或Websphere等)上,我們可能更希望使用應用服務器本身提供的數據源。應用服務器的數據源 使用JNDI開放調用者用,Spring為此專門提供引用JNDI資源的JndiObjectFactoryBean類。  

  <bean id="" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="資源路徑"/>
    </bean>

5.Druid連接池

druid可以做什么?

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層的擴展插件。

druid的基本配置:
<!-- 阿里 druid 數據庫連接池 -->  
  < bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"destroy-method = "close" >    
       <!-- 數據庫基本信息配置 -->  
       < property name = "url" value = "${url}" />    
       < property name = "username" value = "${username}" />    
       < property name = "password" value = "${password}" />    
       < property name = "driverClassName" value = "${driverClassName}" />    
       < property name = "filters" value = "${filters}" />    
        <!-- 最大並發連接數 -->  
       < property name = "maxActive" value = "${maxActive}" />  
       <!-- 初始化連接數量 -->  
       < property name = "initialSize" value = "${initialSize}" />  
       <!-- 配置獲取連接等待超時的時間 -->  
       < property name = "maxWait" value = "${maxWait}" />  
       <!-- 最小空閑連接數 -->  
       < property name = "minIdle" value = "${minIdle}" />    
       <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->  
       < property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" />  
       <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->  
       < property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" />    
       < property name = "validationQuery" value = "${validationQuery}" />    
       < property name = "testWhileIdle" value = "${testWhileIdle}" />    
       < property name = "testOnBorrow" value = "${testOnBorrow}" />    
       < property name = "testOnReturn" value = "${testOnReturn}" />    
       < property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" />  
       <!-- 打開 removeAbandoned 功能 -->  
       < property name = "removeAbandoned" value = "${removeAbandoned}" />  
       <!-- 1800 秒,也就是 30 分鍾 -->  
       < property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" />  
       <!-- 關閉 abanded 連接時輸出錯誤日志 -->     
       < property name = "logAbandoned" value = "${logAbandoned}" />  
  </ bean >

平時練習可以只要前四條,用在項目上時建議全寫

 


免責聲明!

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



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