2012-07-16 189 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