datasource數據源


1、分類

不帶連接池功能:

   如:<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
              <property name="driverClassName"><value>${jdbc.driverClassName}</value></property> 
              <property name="url"><value>${jdbc.url}</value></property> 
              <property name="username"><value>${jdbc.username}</value></property> 
              <property name="password"><value>${jdbc.password}</value></property> 
       </bean> 

帶連接池功能:

      如dbcp druid HikariCP 

     dbcp:

<bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">       
     <property name="driverClassName" value="${jdbc.driverClassName}" />      
     <property name="url" value="${jdbc.url}" />      
     <property name="username" value="${jdbc.username}" />      
     <property name="password" value="${jdbc.password}" />   
      <property name="testOnBorrow" value="false" />     
        <property name="testWhileIdle" value="true" />  
          <!-- 連接池啟動時的初始值 -->
      <property name="initialSize" value="10" />
      <!-- 連接池的最大值 -->
      <property name="maxActive" value="100" />
      <!-- 最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->
      <property name="maxIdle" value="50" />
      <!-- 最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請 -->
      <property name="minIdle" value="10" />
      <!--#給出一條簡單的sql語句進行驗證-->
      <property name="validationQuery" value="select getdate()" />
      <!--#在取出連接時進行有效驗證-->
      <property name="removeAbandonedTimeout" value="120" />
      <property name="removeAbandoned" value="true" />
      <!-- #運行判斷連接超時任務的時間間隔,單位為毫秒,默認為-1,即不執行任務。 -->
      <property name="timeBetweenEvictionRunsMillis" value="3600000" />
      <!-- #連接的超時時間,默認為半小時。 -->
      <property name="minEvictableIdleTimeMillis" value="3600000" /> 
</bean>

 

  druid:

    <bean id="DruidDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@//192.168.1.5:1901/testdb" /> 
        <property name="username" value="root" /> 
        <property name="password" value="root" /> 
        <!-- 配置初始化大小、最小、最大 --> 
        <property name="initialSize" value="1" /> 
        <property name="minIdle" value="1" /> 
        <property name="maxActive" value="20" /> 
        <!-- 配置獲取連接等待超時的時間 --> 
        <property name="maxWait" value="60000" /> 
        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --> 
        <property name="timeBetweenEvictionRunsMillis" value="60000" /> 
        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> 
        <property name="minEvictableIdleTimeMillis" value="300000" /> 
        <!-- 打開PSCache,並且指定每個連接上PSCache的大小 --> 
        <property name="poolPreparedStatements" value="true" /> 
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> 
        <!-- 配置監控統計攔截的filters,去掉后監控界面sql無法統計 --> 
        <property name="filters" value="stat" /> 
</bean>

 

    HikariCP:

       <bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource"  destroy-method="shutdown"> 
 <!-- <property name="driverClassName" value="${db.driverClass}" /> --> <!-- 無需指定,除非系統無法自動識別 --> 
 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" /> 
 <property name="username" value="${db.username}" /> 
 <property name="password" value="${db.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="15" /> 
</bean> 

 

JNDI數據源:

   說明:JndiObjectFactoryBean 能夠通過JNDI獲取DataSource 
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
              <property name="jndiName"><value>Java:comp/env/jdbc/roseindiaDB_local</value></property> 

       </bean> 

或者:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
p:jndiName="java:comp/env/jdbc/netfee" />    //使用P的命名空間(P:jndiName):相當於<property name="jndiName">

 

 

2、數據庫連接池比較


功能

dbcp

druid

c3p0

tomcat-jdbc

HikariCP

是否支持PSCache

監控

jmx

jmx/log/http

jmx,log

jmx

jmx

擴展性

sql攔截及解析

支持

代碼

簡單

中等

復雜

簡單

簡單

更新時間

2019.02

2019.05

2019.03

 

2019.02

最新版本

2.60

1.1.17

0.9.5.4

 

3.3.1

特點

依賴於common-pool

阿里開源,功能全面

歷史久遠,代碼邏輯復雜,且不易維護

 

優化力度大,功能簡單,起源於boneCP

連接池管理

LinkedBlockingDeque

數組

 

FairBlockingQueue

threadlocal+CopyOnWriteArrayList

 

 

參考:

https://blog.csdn.net/qq30211478/article/details/77837054

https://cloud.tencent.com/developer/article/1446874


免責聲明!

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



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