c3p0連線池設定模板,SSM中使用c3p0連線池設定屬性

2020-10-18 11:01:05

1. SSM使用c3p0連線池

1.1 設定c3p0.properties屬性檔案

#c3p0連線池屬性檔案
# 四大基本資訊
c3p0.driverClass=com.mysql.jdbc.Driver
#這裡需要改成你自己的資料庫名稱 和 資料庫連線使用者名稱和密碼
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/資料庫名?useUnicode=true&characterEncoding=UTF-8&useSSL=false
c3p0.user=root
c3p0.password=root

# 初始化連線數  取值要在minPoolSize和maxPoolSize之間(可包含,閉區間) 預設值:3
c3p0.initialPoolSize=10
# 最大連線數 (連線池中的連線數不能超過maxPoolSize最大連線數) 預設值:15
c3p0.maxPoolSize=50
#最小連線數  預設值:3
c3p0.minPoolSize=5
#c3p0連線池中資料連線不夠時(無空閒連線可用),一次增長的個數(增長不能超過maxPoolSize最大連線個數) 預設值:3
c3p0.acquireIncrement=5
#連線的最大空閒時間,如果超過這個時間還沒有被使用,就斷開這個連線(設定為0或負數,就永遠都不會被斷開) 單位:秒  預設值 :0
c3p0.maxIdleTime=600
#從資料庫獲取新連線失敗後重復嘗試的次數。小於等於0表示無限次  預設值: 30
c3p0.acquireRetryAttempts=30
#兩次連線的中間間隔時間(重新嘗試的時間間隔)  單位:毫秒  預設值:1000
c3p0.acquireRetryDelay=1000
#連線關閉時,是否將所有未提交的操作進行事務回滾  預設值:false
c3p0.autoCommitOnClose = false
#當連線池用完時,使用者端呼叫getConnection()後等待獲取新連線的時間  單位:毫秒  預設值:0 (無限期等待)  按照設定的值,超時將丟擲SQLException異常
c3p0.checkoutTimeout = 0
#每隔多少秒檢查所有連線池中的空閒連線  單位:秒   預設值:0
c3p0.idleConnectionTestPeriod=60
#設定PreparedStatement快取,設定連線池為資料來源快取的PreparedStatement的總數,為0的時候不快取,同時maxStatementsPerConnection的設定無效。
# 由於PreparedStatement屬於單個Connection,所以這個數量應該根據應用中平均連線數乘以每個連線的平均PreparedStatement來計算
c3p0.maxStatements=1000

# 連線池為資料來源單個Connection快取的PreparedStatement數,這個設定比maxStatements更有意義,因為它快取的服務物件是單個資料連線,如果設定的好,肯定是可以提高效能的。為0的時候不快取。
# c3p0.maxStatementsPerConnection
#設定連線的生存時間,超過這個時間的連線將由連線池自動斷開丟棄掉。當然正在使用的連線不會馬上斷開,而是等待它close再斷開。設定為0的時候則不會對連線的生存時間進行限制。預設值0
#c3p0.maxConnectionAge
#這個設定主要是為了減輕連線池的負載,設定不為0,則會將連線池中的連線數量保持到minPoolSize,為0則不處理。
#maxIdleTimeExcessConnections

1.2 Spring核心組態檔中設定applicationContext.xml

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 連線池4大元件 -->
        <property name="driverClass" value="${c3p0.driverClass}"/>
        <property name="jdbcUrl" value="${c3p0.jdbcUrl}"/>
        <property name="user" value="${c3p0.user}"/>
        <property name="password" value="${c3p0.password}"/>

        <!--初始化連線數  取值要在minPoolSize和maxPoolSize之間(可包含,閉區間) 預設值:3 -->
        <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>
        <!-- 最大連線數 (連線池中的連線數不能超過maxPoolSize最大連線數) 預設值:15-->
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
        <!--最小連線數  預設值:3  -->
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <!-- c3p0連線池中資料連線不夠時(無空閒連線可用),一次增長的個數(增長不能超過maxPoolSize最大連線個數) 預設值:3 -->
        <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
        <!-- 連線的最大空閒時間,如果超過這個時間還沒有被使用,就斷開這個連線(設定為0或負數,就永遠都不會被斷開) 單位:秒  預設值 :0 -->
        <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>

        <!-- 從資料庫獲取新連線失敗後重復嘗試的次數。小於等於0表示無限次  預設值: 30-->
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
        <!-- 兩次連線的中間間隔時間(重新嘗試的時間間隔)  單位:毫秒  預設值:1000 -->
        <property name="acquireRetryDelay" value="${c3p0.acquireRetryDelay}"/>
        <!-- 連線關閉時,是否將所有未提交的操作進行事務回滾  預設值:false -->
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <!-- 當連線池用完時,使用者端呼叫getConnection()後等待獲取新連線的時間  單位:毫秒  預設值:0
                如果值設為 0,將無限期等待,直到有空閒連線。  否則按照設定的值,超時將丟擲SQLException異常
                時間設定過小時會出現連線超時,這樣會丟擲SQLException異常,設定時間時需要小心,按照實際情況設定適當的值-->
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <!-- 每隔多少秒檢查所有連線池中的空閒連線  單位:秒   預設值:0 -->
        <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>

        <!-- 設定PreparedStatement快取,設定連線池為資料來源快取的PreparedStatement的總數
                為0的時候不快取,同時maxStatementsPerConnection的設定無效。
               由於PreparedStatement屬於單個Connection,所以這個數量應該根據應用中平均連線數乘以每個連線的平均PreparedStatement來計算-->
        <property name="maxStatements" value="${c3p0.maxStatements}"/>

    </bean>

2. c3p0-config.xml

這種通過建立自己的連線池工具類使用

<c3p0-config>
    <!-- c3p0連線池設定 -->
    <default-config>
        <!--預設是mysql資料庫-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/ssm?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</property>
        <!-- 資料庫的使用者名稱  預設值:null -->
        <property name="user">root</property>
        <!-- 資料庫的密碼  預設值:null -->
        <property name="password">861221293</property>


        <!--初始化連線數  取值要在minPoolSize和maxPoolSize之間(可包含,閉區間) 預設值:3 -->
        <property name="initialPoolSize">5</property>
        <!-- 最大連線數 (連線池中的連線數不能超過maxPoolSize最大連線數) 預設值:15-->
        <property name="maxPoolSize">50</property>
        <!--最小連線數  預設值:3  -->
        <property name="minPoolSize">10</property>

        <!-- c3p0連線池中資料連線不夠時(無空閒連線可用),一次增長的個數(增長不能超過maxPoolSize最大連線個數) 預設值:3 -->
        <property name="acquireIncrement">5</property>
        <!-- 連線的最大空閒時間,如果超過這個時間還沒有被使用,就斷開這個連線(設定為0或負數,就永遠都不會被斷開) 單位:秒  預設值 :0 -->
        <property name="maxIdleTime">600</property>

        <!-- 從資料庫獲取新連線失敗後重復嘗試的次數。小於等於0表示無限次  預設值: 30-->
        <property name="acquireRetryAttempts" value="30"/>
        <!-- 兩次連線的中間間隔時間(重新嘗試的時間間隔)  單位:毫秒  預設值:1000 -->
        <property name="acquireRetryDelay">1000</property>
        <!-- 連線關閉時,是否將所有未提交的操作進行事務回滾  預設值:false -->
        <property name="autoCommitOnClose">false</property>
        <!-- 當連線池用完時,使用者端呼叫getConnection()後等待獲取新連線的時間  單位:毫秒  預設值:0
                如果值設為 0,將無限期等待,直到有空閒連線。  否則按照設定的值,超時將丟擲SQLException異常
                時間設定過小時會出現連線超時,這樣會丟擲SQLException異常,設定時間時需要小心,按照實際情況設定適當的值-->
        <property name="checkoutTimeout">0</property>
        <!-- 每隔多少秒檢查所有連線池中的空閒連線  單位:秒   預設值:0 -->
        <property name="idleConnectionTestPeriod">60</property>

        <!-- 設定PreparedStatement快取,設定連線池為資料來源快取的PreparedStatement的總數
                為0的時候不快取,同時maxStatementsPerConnection的設定無效。
               由於PreparedStatement屬於單個Connection,所以這個數量應該根據應用中平均連線數乘以每個連線的平均PreparedStatement來計算-->
        <property name="maxStatements">1000</property>

    </default-config>
</c3p0-config>