數據層spring-dao.xml配置文件中C3P0連接池配置詳解
先放上兩種配置文件bean的相關代碼,文章下面會有詳細的配置屬性的講解,
大家可以自己添加配置和修改配置
<!-- 或者用其他方法導入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
需要結合 https://blog.51cto.com/12133802/2418323 一起使用
需要結合 https://blog.51cto.com/12133802/2418323 一起使用
需要結合 https://blog.51cto.com/12133802/2418323 一起使用
重要的話說三遍?。?!
<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>
<?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.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
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連接超時,
他將物理的關閉,而不是返回池中,
主要是防止連接被長期使用不釋放,這個設置也是比較危險的
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。