2012-07-16 222 views
2

我使用jboss7.0.2最終以甲骨文11.目前我面臨的一個問題,它會發生隨機。但是在重載時,這個錯誤跟蹤不斷增長。嘗試了很多方法都無法成功。java.sql.SQLRecoverableException:關閉連接

MyDatasource配置:

<?xml version="1.0" encoding="UTF-8"?> 
<datasource jndi-name="sportPool" pool-name="sportPool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> 
    <connection-url>jdbc:oracle:thin:@10.11.252.200:1521:sportsdb</connection-url> 
    <driver>oracleDriver</driver> 
    <pool> 
     <min-pool-size>1</min-pool-size> 
     <max-pool-size>75</max-pool-size> 
     <prefill>false</prefill> 
     <use-strict-min>false</use-strict-min> 
     <flush-strategy>FailingConnectionOnly</flush-strategy> 
    </pool> 
    <security> 
     <user-name>mportal</user-name> 
     <password>mobile</password> 
    </security> 
    <timeout> 
     <idle-timeout-minutes>60000</idle-timeout-minutes> 
    </timeout> 
</datasource> 

堆棧跟蹤:

nested exception is java.sql.SQLRecoverableException: Closed Connection 
     at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.translate(SQLExceptionSubclassTranslator.java:82) 
     at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:237) 
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:604) 
     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:638) 
     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:667) 
     at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:683) 

     ... 50 more 
Caused by: java.sql.SQLRecoverableException: Closed Connection 
     at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:4051) 
     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3563) 
     at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628) 
     at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493) 
     at org.jboss.jca.adapters.jdbc.CachedPreparedStatement.executeQuery(CachedPreparedStatement.java:111) 
     at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:462) 
     at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:645) 
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:588) 
     ... 56 more 

回答

0

快速更新。 我已經做了以下的JBOSS應用,即外部變化

**ironjacamar-jdbc** 
  1. 從1.0.3

    Updateed ironjacamar-JDBC JAR到1.1.0在這個位置「{} JBOSS_HOME_7.0.2 /模塊/組織/ JBoss的/ ironjacamar/jdbcadapters /主/」

    Stanalone.xml

如所建議的通過NPE加入<check-valid-connection-sql>

<datasource jndi-name="sportPool" pool-name="sptPool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> 
    <connection-url> 
     jdbc:oracle:thin:@10.11.252.200:1521:sprtsdb 
    </connection-url> 
    <driver> 
     oracleDriver 
    </driver> 
    <pool> 
     <min-pool-size>1</min-pool-size> 
     <max-pool-size>90</max-pool-size> 
     <prefill>false</prefill> 
     <use-strict-min>false</use-strict-min> 
     <flush-strategy>FailingConnectionOnly</flush-strategy> 
    </pool> 
    <security> 
     <user-name>mtal</user-name> 
     <password>mle</password> 
    </security> 
    <validation> 
     <check-valid-connection-sql>SELECT 1 FROM DUAL</check-valid-connection-sql> 
     <validate-on-match>false</validate-on-match> 
     <background-validation>false</background-validation> 
     <use-fast-fail>false</use-fast-fail> 
    </validation> 
    <timeout> 
     <idle-timeout-minutes>15</idle-timeout-minutes> 
    </timeout> 
</datasource> 

這解決了這個問題。但JBoss的打印控制檯的警告消息「IJ000612」,我覺得應該沒問題,只要應用程序從JBoss的越來越有效的連接對象。

1

好像你正在失去連接,在大多數情況下,這種情況發生時,有網絡問題。你使用的配置有點奇怪,

idle-timeout-minutes = 41 days , default is 15 minutes 
min-pool-size = 1 

可能是導致您的SQLRecoverableExceptions的空閒超時分鐘,我會使用像;

idle-timeout-minutes = 15 minutes 
min-pool-size = 10 
max-pool-size = 50 or even less You are using 150MB memory for 75 connections 

如果您沒有很長的數據庫阻塞連接20最大池大小應該足夠。

+0

順便說一下,java.sql.SQLRecoverableException可能會給最終用戶帶來功能性問題 – 2012-07-16 09:58:26

+0

感謝您的回覆。我嘗試了你的設置。仍然遇到同樣的問題。 – satish 2012-07-16 12:14:08

+0

stacktrace是由連接問題引起的,在大多數情況下這是由交換機壞,壞主機文件,壞共享生產網絡造成 – 2012-07-16 13:30:57

5
  1. 看看你的數據庫設置 - 這是可能的,在數據​​庫中設置的超時比的數據源部署描述符中設置超時時間短,關閉數據庫的連接。

  2. 檢查您的網絡 - 這是可能的,有什麼不對您的防火牆/路由設置和連接關閉/在路線中間的某個下降。

  3. 看看這個鏈接JBoss 7 Datasource Configuration。有配置數據源描述,迫使了JBoss從池檢查出來時,檢查連接的方式。使用valid-connection-checker(快)或check-valid-connection-sql(慢)設置,並設置我是如何解決這個問題的

    <valid-connection-checker> 
        org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker 
    </valid-connection-checker> 
    

    <check-valid-connection-sql> 
        SELECT 1 FROM DUAL 
    </check-valid-connection-sql> 
    
+0

1.我不知道如何檢查數據庫服務器上的超時。但在 – satish 2012-07-16 12:05:21

+0

感謝您的答覆。這是我對你的觀點的回答。 – satish 2012-07-16 12:05:39

+0

感謝您的回覆。這是我對你的觀點的回答。 1.我不知道如何檢查數據庫服務器上的超時時間,但在服務器上,我將空閒超時時間改爲15分鐘。 2.我嘗試了很多例子,所以沒有網絡問題。 3.我配置了並重新啓動了服務器,仍然拋出同樣的錯誤。 – satish 2012-07-16 12:07:37