spring下,druid,c3p0,proxool,dbcp四個數據連接池的使用和配置


由於那天Oracle的數據連接是只能使用dbcp的數據庫連接池才連接上了,所以決定試一下當下所有得數據庫連接池連接orcale和mysql,先上代碼

配置文件的代碼

 1 #=================dbcp連接池======================#
 2 #Oracle數據庫連接
 3 #jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
 4 #jdbc_url=jdbc:oracle:thin:@localhost:1521:mydatabase
 5 #jdbc_username=renboqieqie
 6 #jdbc_password=xxxxx
 7 #myssql數據庫配置
 8 
 9 #jdbc_driverClassName = com.mysql.jdbc.Driver
10 #validationQuery = SELECT 1 FROM DUAL
11 #jdbc_url = jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
12 #jdbc_username = root
13 #jdbc_password = root
14 #=================dbcp連接池end======================#
15 
16 
17 #=================druid連接池的配置=================#
18 #Oracle數據庫連接
19 #jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
20 #jdbc_url=jdbc:oracle:thin:@localhost:1521:mydatabase
21 #jdbc_username=renboqieqie
22 #jdbc_password=xxxx
23 #myssql數據庫配置
24 #jdbc_driverClassName = com.mysql.jdbc.Driver
25 #validationQuery = SELECT 1 FROM DUAL
26 #jdbc_url = jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
27 #jdbc_username = root
28 #jdbc_password = root
29 #=================druid連接池的配置end=================#
30 
31 
32 #===================c3p0連接池的配置===================#
33 #Oracle數據庫連接
34 #jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
35 #jdbc_url=jdbc:oracle:thin:@localhost:1521:mydatabase
36 #jdbc_username=renboqieqie
37 #jdbc_password=xxxxx
38 #myssql數據庫配置
39 #jdbc_driverClassName=com.mysql.jdbc.Driver
40 #jdbc_url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
41 #jdbc_username=root
42 #jdbc_password=root
43 #===================c3p0連接池的配置===================#
44 #===================proxool連接池的配置===================#
45 #Oracle數據庫連接
46 #jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
47 #jdbc_url=jdbc:oracle:thin:@localhost:1521:mydatabase
48 #jdbc_username=renboqieqie
49 #jdbc_password=xxxxxx
50 #myssql數據庫配置
51 jdbc_driverClassName=com.mysql.jdbc.Driver
52 jdbc_url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
53 jdbc_username=root
54 jdbc_password=root
55 #===================proxool連接池的配置===================#

下面是spring-mybatis.xml的配置,即spring文件中的配置

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <beans xmlns="http://www.springframework.org/schema/beans"
  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4     xmlns:aop="http://www.springframework.org/schema/aop"
  5     xsi:schemaLocation="
  6 http://www.springframework.org/schema/beans 
  7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  8 http://www.springframework.org/schema/tx 
  9 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
 10 http://www.springframework.org/schema/aop 
 11 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
 12 ">
 13 
 14     <!-- JNDI方式配置數據源 -->
 15     <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
 16         <property name="jndiName" value="${jndiName}"></property> </bean> -->
 17     <!-- ========================================配置數據源========================================= -->
 18     <!-- 配置數據源,使用的是alibaba的Druid(德魯伊)數據源 -->
 19     <!-- <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 
 20         init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" 
 21         /> <property name="username" value="${jdbc_username}" /> <property name="password" 
 22         value="${jdbc_password}" /> 初始化連接大小 <property name="initialSize" value="0" 
 23         /> 連接池最大使用連接數量 <property name="maxActive" value="20" /> 連接池最大空閑 <property 
 24         name="maxIdle" value="20" /> 連接池最小空閑 <property name="minIdle" value="0" /> 
 25         獲取連接最大等待時間 <property name="maxWait" value="60000" /> <property name="poolPreparedStatements" 
 26         value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" 
 27         value="33" /> <property name="validationQuery" value="${validationQuery}" 
 28         /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" 
 29         value="false" /> <property name="testWhileIdle" value="true" /> 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 
 30         <property name="timeBetweenEvictionRunsMillis" value="60000" /> 配置一個連接在池中最小生存的時間,單位是毫秒 
 31         <property name="minEvictableIdleTimeMillis" value="25200000" /> 打開removeAbandoned功能 
 32         <property name="removeAbandoned" value="true" /> 1800秒,也就是30分鍾 <property 
 33         name="removeAbandonedTimeout" value="1800" /> 關閉abanded連接時輸出錯誤日志 <property 
 34         name="logAbandoned" value="true" /> 監控數據庫 <property name="filters" value="stat" 
 35         /> </bean> -->
 36 
 37     <!-- ========================================分隔線========================================= -->
 38     <!-- ========================================dbcp數據源========================================= -->
 39     <!-- mysql的數據庫中,localhost可以寫成127.0.0.1,但是orcale的數據庫不行,只能是localhost才能連接 -->
 40     <!-- 配置dbcp數據源 -->
 41     <!-- <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> 
 42         <property name="driverClassName" value="${jdbc_driverClassName}"/> <property 
 43         name="url" value="${jdbc_url}"/> <property name="username" value="${jdbc_username}"/> 
 44         <property name="password" value="${jdbc_password}"/> 池啟動時創建的連接數量 <property 
 45         name="initialSize" value="5"/> 同一時間可以從池分配的最多連接數量。設置為0時表示無限制。 <property name="maxActive" 
 46         value="30"/> 池里不會被釋放的最多空閑連接數量。設置為0時表示無限制。 <property name="maxIdle" value="20"/> 
 47         在不新建連接的條件下,池中保持空閑的最少連接數。 <property name="minIdle" value="3"/> 設置自動回收超時連接 
 48         <property name="removeAbandoned" value="true" /> 自動回收超時時間(以秒數為單位) <property 
 49         name="removeAbandonedTimeout" value="200"/> 設置在自動回收超時連接的時候打印連接的超時錯誤 <property 
 50         name="logAbandoned" value="true"/> 等待超時以毫秒為單位,在拋出異常之前,池等待連接被回收的最長時間(當沒有可用連接時)。設置為-1表示無限等待。 
 51         <property name="maxWait" value="100"/> </bean> -->
 52     <!-- ========================================分隔線========================================= -->
 53     <!-- ========================================c3p0數據源的配置=============================== -->
 54     <!--2 配置C3P0數據源 -->
 55     <!-- c3p0連接池配置 -->  
 56      <!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
 57           用戶名  
 58           <property name="user" value="${jdbc_username}"/>  
 59           用戶密碼  
 60           <property name="password" value="${jdbc_password}"/>  
 61           <property name="driverClass" value="${jdbc_driverClassName}"/>  
 62           <property name="jdbcUrl" value="${jdbc_url}"/>  
 63   
 64            連接池中保留的最大連接數。默認值: 15   
 65           <property name="maxPoolSize" value="20"/>  
 66           連接池中保留的最小連接數,默認為:3  
 67           <property name="minPoolSize" value="2"/>  
 68           初始化連接池中的連接數,取值應在minPoolSize與maxPoolSize之間,默認為3  
 69           <property name="initialPoolSize" value="2"/>  
 70   
 71           最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。默認值: 0   
 72           <property name="maxIdleTime" value="60"/>
 73             
 74           當連接池連接耗盡時,客戶端調用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設為0則無限期等待。單位毫秒。默認: 0   
 75           <property name="checkoutTimeout" value="3000"/>  
 76             
 77           當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。默認值: 3   
 78           <property name="acquireIncrement" value="2"/>  
 79   
 80          定義在從數據庫獲取新連接失敗后重復嘗試的次數。默認值: 30 ;小於等於0表示無限次   
 81           <property name="acquireRetryAttempts" value="0"/>  
 82   
 83           重新嘗試的時間間隔,默認為:1000毫秒   
 84           <property name="acquireRetryDelay" value="1000" />  
 85   
 86           關閉連接時,是否提交未提交的事務,默認為false,即關閉連接,回滾未提交的事務   
 87           <property name="autoCommitOnClose" value="false"/>  
 88   
 89           c3p0將建一張名為Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那么屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試使用。默認值: null   
 90           <property name="automaticTestTable" value="Test"/>  
 91   
 92           如果為false,則獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常,但是數據源仍有效保留,並在下次調用getConnection()的時候繼續嘗試獲取連接。如果設為true,那么在嘗試獲取連接失敗后該數據源將申明已斷開並永久關閉。默認: false   
 93           <property name="breakAfterAcquireFailure" value="false"/>  
 94   
 95           每60秒檢查所有連接池中的空閑連接。默認值: 0,不檢查   
 96           <property name="idleConnectionTestPeriod" value="60"/>  
 97           c3p0全局的PreparedStatements緩存的大小。如果maxStatements與maxStatementsPerConnection均為0,則緩存不生效,只要有一個不為0,則語句的緩存就能生效。如果默認值: 0   
 98           <property name="maxStatements" value="100"/> 
 99           maxStatementsPerConnection定義了連接池內單個連接所擁有的最大緩存statements數。默認值: 0   
100           <property name="maxStatementsPerConnection" value="0"/>  
101      </bean>   -->
102 
103     <!-- ========================================分隔線========================================= -->
104     <!-- ========================================proxool數據源================================== -->
105 <bean id="dataSource"
106     class="org.logicalcobwebs.proxool.ProxoolDataSource">
107     <property name="driver" value="${jdbc_driverClassName}"/>
108     <property name="driverUrl" value="${jdbc_url}"/>
109     <property name="user" value="${jdbc_username}" />
110     <property name="password" value="${jdbc_password}" />
111     <property name="alias" value="Pool_dbname" />
112     <property name="houseKeepingSleepTime" value="90000" />
113     <property name="prototypeCount" value="0" />
114     <property name="maximumConnectionCount" value="50" />
115     <property name="minimumConnectionCount" value="2" />
116     <property name="simultaneousBuildThrottle" value="50" />
117     <property name="maximumConnectionLifetime" value="14400000" />
118     <property name="houseKeepingTestSql" value="select CURRENT_DATE" />
119 </bean>
120     <!-- ========================================分隔線========================================= -->
121     <!-- ========================================針對myBatis的配置項============================== -->
122     <!-- 配置sqlSessionFactory -->
123     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
124         <!-- 實例化sqlSessionFactory時需要使用上述配置好的數據源以及SQL映射文件 -->
125         <property name="dataSource" ref="dataSource" />
126         <!-- 自動掃描me/gacl/mapping/目錄下的所有SQL映射的xml文件, 省掉Configuration.xml里的手工配置 value="classpath:me/gacl/mapping/*.xml"指的是classpath(類路徑)下me.gacl.mapping包中的所有xml文件 
127             UserMapper.xml位於me.gacl.mapping包下,這樣UserMapper.xml就可以被自動掃描 -->
128         <property name="mapperLocations" value="classpath:win/qieqie/mapping/*.xml" />
129     </bean>
130     <!-- 配置掃描器 -->
131     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
132         <!-- 掃描me.qieqie.dao這個包以及它的子包下的所有映射接口類 -->
133         <property name="basePackage" value="win.qieqie.dao" />
134         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
135     </bean>
136 
137     <!-- ========================================分隔線========================================= -->
138     <!-- 配置Spring的事務管理器 -->
139     <bean id="transactionManager"
140         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
141         <property name="dataSource" ref="dataSource" />
142     </bean>
143 
144     <!-- 注解方式配置事物 -->
145     <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
146 
147     <!-- 攔截器方式配置事物 -->
148     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
149         <tx:attributes>
150             <tx:method name="add*" propagation="REQUIRED" />
151             <tx:method name="append*" propagation="REQUIRED" />
152             <tx:method name="insert*" propagation="REQUIRED" />
153             <tx:method name="save*" propagation="REQUIRED" />
154             <tx:method name="update*" propagation="REQUIRED" />
155             <tx:method name="modify*" propagation="REQUIRED" />
156             <tx:method name="edit*" propagation="REQUIRED" />
157             <tx:method name="delete*" propagation="REQUIRED" />
158             <tx:method name="remove*" propagation="REQUIRED" />
159             <tx:method name="repair" propagation="REQUIRED" />
160             <tx:method name="delAndRepair" propagation="REQUIRED" />
161 
162             <tx:method name="get*" propagation="SUPPORTS" />
163             <tx:method name="find*" propagation="SUPPORTS" />
164             <tx:method name="load*" propagation="SUPPORTS" />
165             <tx:method name="search*" propagation="SUPPORTS" />
166             <tx:method name="datagrid*" propagation="SUPPORTS" />
167 
168             <tx:method name="*" propagation="SUPPORTS" />
169         </tx:attributes>
170     </tx:advice>
171     <aop:config>
172         <aop:pointcut id="transactionPointcut"
173             expression="execution(* win.qieqie.service..*Impl.*(..))" />
174         <aop:advisor pointcut-ref="transactionPointcut"
175             advice-ref="transactionAdvice" />
176     </aop:config>
177 
178 
179     <!-- 配置druid監控spring jdbc -->
180     <bean id="druid-stat-interceptor"
181         class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
182     </bean>
183     <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
184         scope="prototype">
185         <property name="patterns">
186             <list>
187                 <value>me.gacl.service.*</value>
188             </list>
189         </property>
190     </bean>
191     <aop:config>
192         <aop:advisor advice-ref="druid-stat-interceptor"
193             pointcut-ref="druid-stat-pointcut" />
194     </aop:config>
195 
196 </beans>

下面來說jar,有很多次測試不通過,

druid,是因為mybatis的dao和xml沒有匹配,需要druid.jar就可以

dbcp,這個比較順利,只需要一個commons-dbcp.jar就可以了

c3p0,這個最不順利,網上好多教程都至引入了一個包其實是需要兩個包的,c3p0.jar和mchange-commons-java

proxool,這個最開始的時候是不順利的后來也是引入了兩個jar,proxool-cglib.jar和proxool.jar.才型


免責聲明!

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



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