0

我有一个部署到 JBOSS 服务器中的 spring cxf Web 服务应用程序。该服务工作正常,偶尔(在服务器启动后 5-6 天内),我得到并错误“无法为事务打开 JDBC 连接;嵌套异常是 org.apache.commons.dbcp.SQLNestedException:无法获取连接,池错误超时等待空闲对象”并且该特定服务关闭

我在这个应用程序中有大约 17 个服务,只有出现这个数据库连接问题的服务才会关闭,直到我重新启动服务器。

其他服务已上线。

下面是我的 JDBC 模板配置。

<bean id="dataSource" destroy-method="close"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="initialSize" value="10" />
        <property name="maxIdle" value="10" />
        <property name="maxActive" value="100" />
        <property name="maxWait" value="1000" />
        <property name="validationQuery" value="select 1 from sysibm.sysdummy1" />
        <property name="testOnBorrow" value="true" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="1200000" />
        <property name="minEvictableIdleTimeMillis" value="1800000" />
        <property name="numTestsPerEvictionRun" value="5" />
        <property name="defaultAutoCommit" value="false" />
    </bean>

非常感谢您的帮助。

4

3 回答 3

0

这听起来像是连接泄漏,或者您有一些长期运行的进程长期保持数据库连接,最终耗尽您的连接池。也有可能,尽管不太可能,您的数据库延迟非常高,池中出现死连接,识别死连接、建立新连接并验证它所花费的时间比您给定的 1 秒长游泳池。

于 2011-08-09T00:29:18.457 回答
0

您可以尝试将数据源更改为:org.springframework.jdbc.datasource.DriverManagerDataSource

最好用 JBoss 配置数据源并进行 Java EE-jndi 查找。 http://techdive.in/spring/spring-jndi-datasource-configuration-jboss

于 2011-08-10T18:20:35.943 回答
0

我建议您切换到由 JBOSS 管理的 JNDI 数据源。

于 2011-08-08T20:21:04.773 回答