Multithreading Spring-Hibernate-JBOSS-在配置的阻塞超时(30000[ms])内没有可用的ManagedConnections

Multithreading Spring-Hibernate-JBOSS-在配置的阻塞超时(30000[ms])内没有可用的ManagedConnections,multithreading,hibernate,database-connection,spring-3,jboss-4.2.x,Multithreading,Hibernate,Database Connection,Spring 3,Jboss 4.2.x,我在JBoss4.2.2中使用Spring3.0.1和Hibernate3.2,我们使用Spring事务管理来管理事务 我的代码实现运行了一个巨大的作业,运行了将近10分钟。spring服务bean RunJobBean.java是我的作业的入口点,它实例化了许多独立的线程(每个线程执行不同的DB更新和其他逻辑等),这些线程调用hibernate DAO bean(这些被注入到RunJobBean中,后者传递给线程)从DB2服务器读取数据,并将数据读写到两个不同的Oracle数据库(在两个不同的

我在JBoss4.2.2中使用Spring3.0.1和Hibernate3.2,我们使用Spring事务管理来管理事务

我的代码实现运行了一个巨大的作业,运行了将近10分钟。spring服务bean RunJobBean.java是我的作业的入口点,它实例化了许多独立的线程(每个线程执行不同的DB更新和其他逻辑等),这些线程调用hibernate DAO bean(这些被注入到RunJobBean中,后者传递给线程)从DB2服务器读取数据,并将数据读写到两个不同的Oracle数据库(在两个不同的服务器上运行)

java执行必要的预处理并调用RunJobBean来运行作业

在最近的更改之前,此选项可以正常工作

bean StartRunJob.java(由另一个团队管理,我无法控制)最近被修改为并行调用多个作业。因此StartRunJob调用多个独立线程,这些线程中的每一个都调用我的RunJobBean。在运行StartRunJob时,我收到了下面提到的错误。日志显示这是来自我的代码

org.hibernate.exception.genericjdbception:无法打开连接 原因:org.jboss.util.NestedSQLException:在配置的阻塞超时(30000[ms])内没有可用的ManagedConnections;-嵌套throwable:(javax.resource.ResourceException:在配置的阻塞超时(30000[ms])内没有可用的ManagedConnections)

服务器上配置的最大连接数为5,最小连接数为1。每个人都认为我连接到Oracle DB1的代码正在消耗所有连接,而不是释放它们。JBOSS控制台显示InUseConnectionCount为3、4或5。但我仍然看到了这个问题。但我连接到第二个OracleDB的代码也在消耗这些连接最大连接数为5,但我调用了12个不同的线程来进行DB调用,这很好

我想要一个关于如何解决这个问题的建议

提前谢谢

与此相关的一些问题。 1.我如何在JBOSS中检查哪个bean持有db连接?
2.如何在JBOSS中检查有多少DB连接处于空闲状态?

我已解决此问题。我已确定事务中存在漏洞

更新:很早以前我就做过这个,但我记得,在其中一个事务中,属性必须是只读的,因为它被分配了类似于更新的内容,因为spring向DB发出了多次调用。当我们将其更改为只读时,一切正常


但我仍然保留这个问题,让一些专家回答其他问题,这样他们会对其他人有所帮助。

当有3万用户访问应用程序时,我们在生产中也遇到了同样的问题。您能详细说明您的解决方案吗?答案不包括任何有助于解决问题的详细信息。