我使用Spring 3.0.1和Hibernate 3.2与JBOSS 4.2.2,我们使用Spring事务管理来管理事务。
我的代码实现运行了一个大约10分钟的巨大工作。春天服务bean RunJobBean.java是我的工作的入口点,它实例化了许多独立的线程(每个执行不同的DB更新和其他逻辑等)这些线程调用hibernate DAO bean(这些bean被注入RunJobBean,传递给线程)从DB2服务器读取并读取和写入两个不同的Oracle数据库(在两个不同的服务器上运行)。
Bean StartRunJob.java执行必要的预处理并调用RunJobBean来运行该作业。
这种用法可以在最近的更改之前正常工作。
最近修改了bean StartRunJob.java(由另一个团队管理。我对此无法控制)以并行调用多个作业。所以StartRunJob调用多个独立的线程,每个线程调用我的RunJobBean。在运行StartRunJob时,我收到了下面提到的错误。日志显示这是来自我的代码。
org.hibernate.exception.GenericJDBCException:无法打开连接 引起:org.jboss.util.NestedSQLException:配置的阻塞超时(30000 [ms])内没有可用的ManagedConnections; - 嵌套throwable:(javax.resource.ResourceException:配置的阻塞超时内没有ManagedConnections(30000 [ms]))
服务器上配置的最大连接数为5,min为1.每个人都认为连接到Oracle DB1的代码正在消耗所有连接而不释放它们。 JBOSS控制台将InUseConnectionCount显示为3或4或5.但我仍然看到这个问题。但我连接到第二个OracleDB的代码也有5个最大连接,但是我调用了12个不同的线程来调用DB,这很好。
我想就如何解决这个问题提出建议。
提前致谢。
与此相关的一些问题。 1.如何检查JBOSS哪个bean持有数据库连接? 2.如何检查JBOSS有多少数据库连接空闲?
答案 0 :(得分:-1)
我已经解决了这个问题。已经确定了交易中的泄密。
更新:我已经做了很长时间了,但是正如我记得的那样,在其中一个交易中,一个属性必须是只读的,因为它被分配了类似于更新的东西,因为这个多次调用是被春天解雇给DB。当我们将其改为只读时,情况正常。
但是我仍然可以让这个问题让一些专家回答其他问题,这样他们就会对某人有所帮助。