1. 程式人生 > >CP30資料連線池死鎖

CP30資料連線池死鎖

在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring和hibernate,因此,這些查詢介面只是使用了c3p0來管理資料庫連線。

       和很多網友一樣,碰到了死鎖的這個問題,資訊類似如下:

       WARNING: com[email protected]4b9cafa7 -- APPARENT DEADLOCK!!! Complete Status:
          Managed Threads: 3
          Active Threads: 3

        通過中介軟體的日誌發現:中介軟體多個應用在同時啟動時,肯定報這個警告;有兩臺伺服器在凌晨4點左右,幾乎同時報這個警告。奇怪的是,貌似業務沒有受到影響。之後,在網上查找了很多資料和部落格,貌似沒用。這裡想說的是,解決問題還是要從自身的應用環境出發;在進行測試時,儘量模擬真實的環境,不要只是能用就行。

        既然,中介軟體多個應用在同時啟動時,肯定報這個警告,那就模擬一下。在eclipse中,同時啟動三個同一個測試用例(三個不同的程序);果然,三個測試用例都報了這個警告。為什麼呢?因為中介軟體使用的是,我提供的介面,自然C3P0的配置檔案也是一樣的;如果說,這裡邊有什麼衝突的話,那就是這些資料來源的名稱是相同了。修改後,在資料來源的名稱後面加上一些隨機字元,再次進行測試,啟動就沒有報這個錯誤了。再在中介軟體的伺服器上進行測試,啟動沒有報這個警告了。

        一些網友,也提到C3P0在配置多資料來源時,容易出現死鎖的問題,下面給出一個部落格連結:http://www.2cto.com/database/201411/349966.html

       另外,在配置連線池單例時,在多執行緒獲取連線時,也容易出現獲取連線超時的問題,你可以需要按照下面這樣修改程式碼:

[html] view plain copy print?
  1. public <spanstyle="color:#ff0000;">synchronized</span> final Connection getConnection() {  
  2.         try {  
  3.                 return ds.getConnection();  
  4.         } catch (SQLException e) {  
  5.                 e.printStackTrace();  
  6.         }  
  7.         return null;  
  8.     }  

相關推薦

CP30資料連線

在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring和hibern

c3p0資料庫連線解決

專案進行壓力測試的時候,執行大概1小時候,後臺丟擲以下異常: Java程式碼   Nov 9, 2012 1:41:59 AM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector 

c3p0資料庫連線問題和mysql重連,連線丟失

c3p0引數解釋 #最常用配置#initialPoolSize:連線池初始化時建立的連線數,default : 3,取值應在minPoolSize與maxPoolSize之間 c3p0.initialPoolSize=10#minPoolSize:連線池保持的最小連線數,d

記一次:c3p0連線的問題

       在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring

用Hibernate儲存物件出現c3p0資料庫連線問題的可能原因

我在執行以下程式碼時遇到了問題: Session session = getSession(); Transaction tx = session.beginTransaction(); try {

初識資料連線

什麼是資料連線池? 資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。 為什麼要使用資料連線池? 原因:建立資料庫連線是相當耗時和耗費資

web———資料連線的工作機制是什麼?

1.資料庫連線池屬於建立時間昂貴,並且數量有限的資源。如果每次執行sql時都建立新的連線,使用完即刻關閉連線,不僅會造成資源的浪費,而且在併發量大的情況下還會拖慢甚至拖垮資料庫。(測試得出結果單獨執行緒建立資料庫建立時間遠遠大於執行時間) 2. 因此需要使用連線池的概念:預先建立好一批資

測試c3p0資料連線的使用----簡單筆記

加入jar包 上程式碼 配置檔案 <c3p0-config> <!-- This app is massive! --> <named-config name="myconfig"> <!-- 設定常用

Python執行緒,以及多執行緒帶來的資料錯亂和的解決方法

摘至本人有道雲筆記《Python執行緒》 1.python多執行緒的建立 在Python中,同樣可以實現多執行緒,有兩個標準模組thread和threading,不過我們主要使用更高階的threading模組 threading模組提供的類:      Thread,

解決Tomcat資料連線無法釋放

近段時間,公司的檢測中心報表系統(SMC)的開發人員時不時找到我,說使用者老是出現無法登入的情況。前些日子因為手頭上有 Jboss 叢集的測試工作,發現使用者不能登入時,都是在 Tomcat 中將這個專案 Reload 一下就好了,不過只是治標而已,因為大概幾個小時之後又會再次出現無法登入的情況。 今天上

idea配置阿里Druid資料連線在SSM框架中使用

阿里Druid資料連線池在SSM框架中的配置使用 一、Druid資料連線池簡介 Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。 效能好,同時自帶監控頁面,可以實時監控應用的連線池情況以及其中效能差的sql,方便我們找出應用中連線池方面的問題。

資料連線的工作原理

轉自:http://www.uml.org.cn/sjjm/201004153.asp 隨著資訊科技的高速發展與廣泛應用,資料庫技術在資訊科技領域中的位置越來越重要,尤其是網路應用和電子商務的迅速發展,都需要資料庫技術支援動 態Web站點的執行,而傳統的開發模式是:首先在主

二十四、併發程式設計之簡易資料連線

public class MyDataSource { private LinkedList<Connection> pool = new LinkedList(); //連結串列放連線池用 private static final int INIT_CONNECTION

資料連線——JNDI

資料庫連線有很多中方式,JDBC資料庫的連線方式,前邊我們已經介紹過了,而開發中我們經常使用的是DataBaseConnectionPool(資料庫連線池,DBCP)。資料庫連線池到底是什麼?它比jdbc資料庫連線有什麼優勢呢?它又怎麼使用呢? 一,先看一下JDBC連線,

資料連線的工作機制是什麼?

  資料庫連線是一種關鍵的有限的昂貴的資源,這一點企業級應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。     資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重

與spring整合的幾種資料連線

資料來源概述 資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個 應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。   資料庫連線池負責分配、管理

資料連線預設配置帶來的坑testOnBorrow=false,cloes_wait 終於解決了

首先說一下自己程式中遇到的問題,前一段新寫了一個專案,主要為方便公司業務切庫做準備,為其他專案提供介面(spring boot 專案<spring boot + mongo data jpa+mybatis>) 首先呢 多資料來源沒有使用spring boot 整合mybatis,開始有過自己

Druid資料連線原始碼分析

Druid是阿里巴巴公司的資料庫連線池工具,昨天突然想學習一下阿里的druid原始碼,於是下載下來分析了一下。也就2個多小時粗略看了一下,中間有些知識點沒見過,不懂,現查BAIDU學習。簡單總結一下,邊總結邊繼續看程式碼,估計錯誤不少,歡迎指正!      在自己看之前,想找找druid原始碼分析,居然在B

說出資料連線的工作機制是什麼

J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。    呼叫:客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並將其表記為 忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。 釋放:當使用的池連

spring配置hibernate 資料來源(資料連線)

現在常用的開源資料連線池主要有c3p0、dbcp和proxool三種,其中:  hibernate開發組推薦使用c3p0;  spring開發組推薦使用dbcp(dbcp連線池有weblogic連線池同樣的問題,就是強行關閉連線或資料庫重啟後,無法reconnect,