在我的應用程序中,Spring管理連接池以訪問數據庫。 Hibernate使用這些連接進行查詢。乍一看,我對池沒有任何問題:它對併發客戶端和只有一個連接的池正常工作。我可以執行很多查詢,所以我認爲我(或Spring)不會保留打開的連接。連接在閒置之後掛起
我的問題出現一段時間後不活動(有時30分鐘,有時超過2小時)。然後,當Hibernate進行一些搜索時,它會持續太久。 Log4j級別設置追查,我得到這個日誌:
...
18:27:01 DEBUG nsactionSynchronizationManager - Retrieved value [[email protected]] for key [[email protected]] bound to thread [http-8080-Processor24]
18:27:01 DEBUG HibernateTransactionManager - Found thread-bound Session [[email protected]] for Hibernate transaction
18:27:01 DEBUG HibernateTransactionManager - Using transaction object [org.springframework.orm.hi[email protected]1b2ffee]
18:27:01 DEBUG HibernateTransactionManager - Creating new transaction with name [com.acjoventut.service.GenericManager.findByExample]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
18:27:01 DEBUG HibernateTransactionManager - Preparing JDBC Connection of Hibernate Session [[email protected]]
18:27:01 TRACE SessionImpl - setting flush mode to: AUTO
18:27:01 DEBUG JDBCTransaction - begin
18:27:01 DEBUG ConnectionManager - opening JDBC connection
這被冷凍約2 - 10分鐘。但接着繼續:
18:30:11 DEBUG JDBCTransaction - current autocommit status: true
18:30:11 DEBUG JDBCTransaction - disabling autocommit
18:30:11 TRACE JDBCContext - after transaction begin
18:30:11 DEBUG HibernateTransactionManager - Exposing Hibernate transaction as JDBC transaction [jdbc:oracle:thin:@212.31.39.50:30998:orcl, UserName=DEVELOP, Oracle JDBC driver]
18:30:11 DEBUG nsactionSynchronizationManager - Bound value [[email protected]] for key [[email protected]] to thread [http-8080-Processor24]
18:30:11 DEBUG nsactionSynchronizationManager - Initializing transaction synchronization
...
之後,它的工作沒有問題,直到另一個不活動的時期。恕我直言,它似乎像連接池返回一個無效/關閉連接,當Hibernate意識到這一點時,要求另一個連接池。
我不知道我該如何解決這個問題,或者我可以用它來分隔它。任何幫助實現這一點將不勝感激。
謝謝。
編輯:嗯,它最終是由於防火牆的規則。數據庫檢測到連接丟失,但池(dbcp或c3p0)不是。所以,它試圖查詢數據庫沒有成功。對我來說仍然很奇怪的是,超時時間非常多變。也許這個規則特別奇怪,或者防火牆無法正常工作。無論如何,我無法訪問該機器,我只能等待解釋。 :(
你是如何確定這是否是防火牆的問題?我遇到了一個類似的問題,其中dbcp無限期地掛在我的Spring Batch事務上,並且永遠不會返回 – YogendraJ 2016-05-20 05:06:31