成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

tomcat7使用dbcp連接池遇到的坑

silenceboy / 2243人閱讀

摘要:查看資料的過(guò)程中發(fā)現(xiàn)連接池是有兩種的連接池與連接池。在分配對(duì)象或?qū)ο蠓祷氐臅r(shí)候,會(huì)鎖定全部連接池。連接池使用接口獲取底層連接連接池可以防止饑餓。當(dāng)連接返回時(shí),池就將喚醒正確的等待線程。

項(xiàng)目部署在tomcat后每隔一段時(shí)間便會(huì)報(bào)錯(cuò)

 Cause: java.sql.SQLException: Could not retrieve transation read-only status server
; SQL []; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server

開(kāi)始以為是數(shù)據(jù)庫(kù)事務(wù)級(jí)別過(guò)高,后來(lái)發(fā)現(xiàn)是每隔一天沒(méi)操作便會(huì)丟失鏈接,于是找到原因

MySQL 的默認(rèn)設(shè)置下,當(dāng)一個(gè)連接的空閑時(shí)間超過(guò)8小時(shí)后,MySQL 就會(huì)斷開(kāi)該連接,而 c3p0/dbcp 連接池則以為該被斷開(kāi)的連接依然有效。在這種情況下,如果客戶端代碼向c3p0/dbcp 連接池請(qǐng)求連接的話,連接池就會(huì)把已經(jīng)失效的連接返回給客戶端,客戶端在使用該失效連接的時(shí)候即拋出異常。

于是簡(jiǎn)單的修改了mysql的設(shè)置

    #my.cnf
    wait_timeout=31536000  
    interactive_timeout=31536000  

但是這樣改動(dòng)的話wait_timeout太大了,會(huì)保留太多的無(wú)效鏈接,于是就從連接池上采取改動(dòng)。在spring 連接池配置中加入定時(shí)檢測(cè),配置字段如下

maxWait="3000" 從池中取連接的最大等待時(shí)間,單位ms.  
initialSize="10"  初始化連接  
maxIdle="60"   最大空閑連接  
minIdle="10"   最小空閑連接  
maxActive="80" 最大活動(dòng)連接  
   
validationQuery = "SELECT 1"  驗(yàn)證使用的SQL語(yǔ)句  
testWhileIdle = "true"      指明連接是否被空閑連接回收器(如果有)進(jìn)行檢驗(yàn).如果檢測(cè)失敗,則連接將被從池中去除.  
testOnBorrow = "false"   借出連接時(shí)不要測(cè)試,否則很影響性能  
timeBetweenEvictionRunsMillis = "30000"  每30秒運(yùn)行一次空閑連接回收器  
minEvictableIdleTimeMillis = "1800000"  池中的連接空閑30分鐘后被回收,,默認(rèn)值就是30分鐘
numTestsPerEvictionRun="10" 在每次空閑連接回收器線程(如果有)運(yùn)行時(shí)檢查的連接數(shù)量,默認(rèn)值就是3.  
      
removeAbandoned="true"  連接泄漏回收參數(shù),當(dāng)可用連接數(shù)少于3個(gè)時(shí)才執(zhí)行  
removeAbandonedTimeout="180"  連接泄漏回收參數(shù),180秒,泄露的連接可以被刪除的超時(shí)值

配置后問(wèn)題得到解決。

查看資料的過(guò)程中發(fā)現(xiàn)dbcp連接池是有兩種的:Tomcat JDBC連接池與Apache Commons DBCP連接池。下面是兩者的區(qū)別

1.Commons DBCP 1.x是單線程。在分配對(duì)象或?qū)ο蠓祷氐臅r(shí)候,會(huì)鎖定全部連接池。(不適用于Commons DBCP 2.x)

2.Commons DBCP 1.x在邏輯cpu數(shù)量增加或者并發(fā)縣城增加時(shí),性能可能會(huì)變的很慢。高并發(fā)系統(tǒng)受到的影響會(huì)更加明顯(不適用于Commons DBCP 2.x)

3.Commons DBCP 擁有60多個(gè)類。tomcat-jdbc-pool核心只有8個(gè)類,而未來(lái)如果需求變更,那么tomcat JDBC連接池會(huì)改動(dòng)更少。

4.Commons DBCP使用靜態(tài)接口,需要對(duì)應(yīng)的jre需要對(duì)應(yīng)的DBCP 版本,否則會(huì)拋出 NoSuchMethodException異常

5.Tomcat JDBC連接池?zé)o需為庫(kù)本身添加額外線程,就能獲取異步連接。

6.Tomcat JDBC連接池使用 javax.sql.PooledConnection接口獲取底層連接

7.Tomcat JDBC連接池 可以防止饑餓。如果池變空,線程將等待一個(gè)連接。當(dāng)連接返回時(shí),池就將喚醒正確的等待線程。

配置tomcat-dbcp是在tomcat安裝路徑下配置的

配置Tomcat-DBCP
Tomcat默認(rèn)使用的是DBCP數(shù)據(jù)庫(kù)連接池,其實(shí)從本質(zhì)上講,Tomcat是利用Apache Commons DBCP來(lái)實(shí)現(xiàn)的,只不過(guò)把特定的功能集成到了tomcat-dbcp.jar包中,這個(gè)包在tomcat的lib里面.

1.配置context.xml

    注意:(1)不是Context.xml,這個(gè)需要看你tomcat里面conf目錄下是context.xml還是Context.xml,和這個(gè)一樣就行.

        (2)這個(gè)配置即可以在${CATALINA_HOME}/conf/context.xml里配置,(CATALINA_HOME是你tomcat的安裝目錄)

        也可以在${CATALINA_HOME}/webapps/項(xiàng)目名/META-INF/context.xml里,(項(xiàng)目名就是webapps下的一些目錄名稱,

        比如:ROOT.如果ROOT下沒(méi)有META-INF,那么創(chuàng)建一個(gè)就行,然后再在META-INF里創(chuàng)建文檔context.xml)

如何將tomcat-dbcp數(shù)據(jù)源使用到項(xiàng)目中呢 有如下配置

在web項(xiàng)目的web.xml中加入資源引用:(可省略)

JNDI DataSource
jndi/testdb
javax.sql.DataSource
Container

啟動(dòng)的時(shí)候加載tomcat配置的JNDI 公開(kāi)數(shù)據(jù)源,其中res-ref-name值要和server.xml 、context.xml的name值一致。

在web項(xiàng)目中配置spring數(shù)據(jù)源bean信息:



java:comp/env/jndi/testdb
 

直接替換項(xiàng)目WEB-INF/conf/data-access-config.xml文件中 beanid=”dataSource” 的節(jié)點(diǎn)即可使用

但是由于考慮到使用jndi配置數(shù)據(jù)源對(duì)已有程序影響較大,所以最后只是升級(jí)了common-dbcp版本來(lái)獲取更高的性能。以上就是解決這個(gè)問(wèn)題大致的過(guò)程。
參考:
https://blog.csdn.net/lzwglor...
http://elf8848.iteye.com/blog...
https://blog.csdn.net/Jacabe/...
https://blog.csdn.net/acoolpe...
https://blog.csdn.net/u011487...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/72258.html

相關(guān)文章

  • JAVA數(shù)據(jù)庫(kù)連接總結(jié)

    摘要:目前主流的數(shù)據(jù)庫(kù)連接池有等幾種。默認(rèn)值初始化連接池中的連接數(shù),取值應(yīng)在與之間,默認(rèn)為最大空閑時(shí)間秒內(nèi)未使用則連接被丟棄。當(dāng)連接池中的連接耗盡的時(shí)候一次同時(shí)獲取的連接數(shù)。每秒檢查所有連接池中的空閑連接。 一、數(shù)據(jù)庫(kù)連接池 數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)緩沖池,預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需要從緩沖池中取出一個(gè),使用完之后在放回去,節(jié)省連接建...

    xioqua 評(píng)論0 收藏0
  • JDBC常見(jiàn)面試題

    摘要:常見(jiàn)面試題操作數(shù)據(jù)庫(kù)的步驟操作數(shù)據(jù)庫(kù)的步驟注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)??梢苑乐棺⑷?,安全性高于。只有隔離級(jí)別才能防止產(chǎn)生幻讀。對(duì)象維護(hù)了一個(gè)游標(biāo),指向當(dāng)前的數(shù)據(jù)行。一共有三種對(duì)象。 以下我是歸納的JDBC知識(shí)點(diǎn)圖: showImg(https://segmentfault.com/img/remote/1460000013312769); 圖上的知識(shí)點(diǎn)都可以在我其他的文章內(nèi)找到相應(yīng)內(nèi)容。 JDBC...

    Yuqi 評(píng)論0 收藏0
  • Tomcat 7 類加載器是如何實(shí)現(xiàn)的

    摘要:請(qǐng)注意,應(yīng)用程序類加載器的模型與此略有不同,如下所述,但主要原則是相同的。此類由加載器搜索的位置中的屬性定義。該服務(wù)器類加載器是唯一到內(nèi)部可見(jiàn),并且是應(yīng)用程序完全不可見(jiàn)。 Tomcat 7 類加載器是如何實(shí)現(xiàn)的 概述 與許多服務(wù)器應(yīng)用程序一樣,Tomcat安裝了各種類加載器(即實(shí)現(xiàn)的類java.lang.ClassLoader),以允許容器的不同部分和容器上運(yùn)行的Web應(yīng)用程序訪問(wèn)可用...

    trigkit4 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<