溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C3P0連接池配置詳解 + 數據庫主從配置

發布時間:2020-03-16 11:10:33 來源:網絡 閱讀:3626 作者:子非魚丶Y 欄目:數據庫

數據層spring-dao.xml配置文件中C3P0連接池配置詳解

先放上兩種配置文件bean的相關代碼,文章下面會有詳細的配置屬性的講解,
大家可以自己添加配置和修改配置


普通單一數據庫連接池配置

spring-dao.xml部分內容(C3P0連接池部分):

<!-- 或者用其他方法導入jdbc.properties -->
<context:property-placeholder location="classpath:jdbc.properties"/>

 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <!-- 配置連接池屬性 -->
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>

            <!-- c3p0連接池的私有屬性 -->
            <property name="maxPoolSize" value="30"/>
            <property name="minPoolSize" value="10"/>

            <!-- 關閉連接后不自動commit -->
            <property name="autoCommitOnClose" value="false"/>

            <!-- 獲取連接超時時間 -->
            <property name="checkoutTimeout" value="10000"/>

            <!-- 當獲取連接失敗重試次數 -->
            <property name="acquireRetryAttempts" value="2"/>
    </bean>

jdbc.properties配置:

        jdbc.driver=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql://自己服務器的ip地址:3306/o2o?useUnicode=true&characterEncoding=utf8
        jdbc.username=root
        jdbc.password=123123123

C3P0 Mysql主從配置

需要結合 https://blog.51cto.com/12133802/2418323 一起使用
需要結合 https://blog.51cto.com/12133802/2418323 一起使用
需要結合 https://blog.51cto.com/12133802/2418323 一起使用
重要的話說三遍?。?!

spring-dao.xml部分內容(C3P0連接池部分):

       <bean id="dataSource" abstract="true" 
                class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

            <!-- c3p0連接池的私有屬性 -->
            <property name="maxPoolSize" value="30"/>
            <property name="minPoolSize" value="10"/>

            <!-- 關閉連接后不自動commit -->
            <property name="autoCommitOnClose" value="false"/>

            <!-- 獲取連接超時時間 -->
            <property name="checkoutTimeout" value="10000"/>

            <!-- 當獲取連接失敗重試次數 -->
            <property name="acquireRetryAttempts" value="2"/>

        </bean>
        <bean id="master" parent="abstractDataSource">
            <!-- 配置連接池屬性 -->
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.master.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>
        <bean id="slave" parent="abstractDataSource">
            <!-- 配置連接池屬性 -->
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.slave.url}"/>
            <property name="user" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>

        <!-- 配置動態數據源,targetDataSources就是路由數據源所對應的名稱 -->
        <bean id="dynamicDataSource" class="自己編寫的類的路徑.DynamicDataSource">
            <property name="targetDataSources">
                <map>
                    <!-- value-ref中的master是上面bean配置的id,
                            key是DynamicDataSourceHolder和DynamicDataSourceInterceptor中的那個lookupKey -->
                    <entry value-ref="master" key="master"></entry>
                    <entry value-ref="slave" key="slave"></entry>
                </map>
            </property>
        </bean>

        <!-- 由于我們需要使用sql語句的時候才會決定數據源,所以使用懶加載 -->
        <bean id="dataSource"
            class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
            <property name="targetDataSource">
                <ref bean="dynamicDataSource"/>
            </property>
        </bean>

mybatis-conf.xml配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd" >

 <configuration>
    <!-- 配置全局屬性 -->
    <settings>
        <!-- 使用jdbc的getGeneratedKeys獲取數據庫自增主鍵值 -->
        <setting name="useGeneratedKeys" value="true"/>

        <!-- 使用列別名替換列名 默認true -->
        <setting name="useColumnLabel" value="true"/>

        <!-- 開啟駝峰命名轉換:Table{create_time} ->Entity{creatTime} -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>

    </settings>
    <!-- 配置上攔截器,和普通的配置相比多了這個部分 -->
    <plugins>
        <plugin interceptor="自己配置的攔截器類的路徑.DynamicDataSourceInterceptor"></plugin>
    </plugins>

 </configuration>

jdbc.properties配置:

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.master.url=jdbc:mysql://主服務器IP地址:3306/o2o?useUnicode=true&characterEncoding=utf8
    jdbc.slave.url=jdbc:mysql://主服務器IP地址:3306/o2o?useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=123123123

接下來就是C3P0配置的詳解了

基本配置 :
driverclass: 數據庫驅動類

        mysql驅動則為:         com.mysql.jdbc.Driver
        oraclel驅動則為:        oracle.jdbc.driver.OracleDriver
        sqlserver驅動則為:      com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbcUrl:  數據庫連接

        mysql連接:jdbc:mysql://IP:端口/數據庫名稱,
        例子:
        jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf-8

        oracle連接:jdbc.url=jdbc:oracle:thin:@IP:端口:實例名(sid) 
        例子:
        jdbc:oracle:thin:@127.0.0.1:1521:orcl

        sqlserver連接:jdbc:sqlserver://IP:端口;instanceName=sqlserver2005(版本);DatabaseName=easysite_2005(數據庫名稱)
        例子:
        jdbc:sqlserver://127.0.0.1:1433;instanceName=sqlserver2005;DatabaseName=easysite_2005
    user:登錄數據庫的賬號
    password:登錄數據庫的密碼

    <property name="user" value="username"/>
    <property name="password" value="password"/>

私有配置:

c3p0.acquireIncrement=20
默認值為: 3
當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數

c3p0.minPoolSize=20
默認值為: 3
連接池中保留的最小連接數

c3p0.maxPoolSize=100
默認值為: 15
接池中保留的最大連接數

c3p0.initialPoolSize=20
默認值為: 3
初始化時獲取連接數,取值應在minPoolSize與maxPoolSize之間

c3p0.maxIdleTime=60
默認值為: 0
最大空閑時間,多少秒內未使用則連接被丟棄。若為0則永不丟棄

c3p0.maxStatements=0
默認值為: 0
c3p0全局的PreparedStatements緩存的大小。
如果maxStatements與maxStatementsPerConnection均為0,
則緩存不生效,只要有一個不為0,則語句的緩存就能生效

c3p0.numHelperThreads=10
默認值為: 3
c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完成。
擴展這些操作可以有效的提升性能通過多線程實現多個操作同時被執行

c3p0.acquireRetryAttempts=5
默認值為: 30
定義在從數據庫獲取新連接失敗后重復嘗試的次數。小于等于0表示無限次

c3p0.acquireRetryDelay=300
默認值為: 1000毫秒(ms)
重新嘗試的時間間隔

c3p0.checkoutTimeout=3000
獲取一個connection超時時間

c3p0.idleConnectionTestPeriod=60
默認值為: 0
每隔多少秒檢查所有連接池中的空閑連接

c3p0.automaticTestTable=sys_connectiontest
默認值為: null
c3p0將建一張名為改配置項的空表,并使用其自帶的查詢語句進行測試。
如果定義了這個參數那么屬性preferredTestQuery將被忽略。
你不能在這張Test表上進行任何操作,它將只供c3p0測試使用
由于運營平臺的數據庫用戶沒有創建表的權限,故需要發sql創建表

c3p0.testConnectionOnCheckin=true
默認值為: false
如果設為true那么在取得連接的同時將校驗連接的有效性

c3p0.unreturnedConnectionTimeout=15
一個checkout連接的超時設置,一旦一個checkout連接超時,
他將物理的關閉,而不是返回池中,
主要是防止連接被長期使用不釋放,這個設置也是比較危險的
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女