Java-Orcale无法打开JDBC连接进行事务

问题描述

我正在做一个非常大但执行不力的项目,我们遇到了一个与de Database有关的重大性能问题。 我们正在使用Oracle,数据库云服务器和bla bla bla。 应用服务器:tomcat 潜水员:ojdbc6

以及下一个配置:

<property name="connectionCachingEnabled" value="true" />
<property name="connectionCacheProperties">
<value>
MinLimit:180
MaxLimit:200
InitialLimit:50
ConnectionWaitTimeout:120
InactivityTimeout:180
....

该应用程序具有将近15个独立运行的模块,但有些模块包括其他模块并使用其数据源。

是的,我知道...您在想什么。当我到达时,已经是这样了,我需要修补它,而团队正在努力 重新设计

问题在于,这15个模块应建立200个连接,但是在使用此意大利面的情况下,每个模块也都包含了所包含的模块连接。

这是一种联系方式!

但是,此时的问题是某些模块无法建立200个连接,因为数据库没有更多的资源,所以..与“ ConnectionWaitTimeout”配置相关的它会向池返回一个beautifuln null,并显示下一条消息:

无法打开JDBC连接进行事务;嵌套异常是java.lang.IllegalArgumentException:连接不能为空

检查数据库中的大多数模块需要200个连接,但只有7个处于活动状态,而197个处于非活动状态。

我找不到正确的配置来释放不活动的配置。

我使用了InactivityTimeout和AbandonedConnectionTimeout,但是问题仍然存在。

解决方法

如果不分析应用程序,我们只能推测发生此问题的原因。

  1. 自创建197个连接(超过180个连接)以来,应用程序似乎已从池中请求了如此多的连接。
  2. 由于无效超时没有帮助,因此我们必须假定连接仍由应用程序保留。
  3. 现在,由于放弃超时没有帮助,所以有两种可能性。
    A)应用程序确实在超时期限内查询数据库。
    B)池收回了连接,应用程序应该捕获了异常并重试了

我建议您了解其中一个模块中的代码以了解连接使用模式。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...