我有一个Java Web应用程序连接到在另一台计算机上运行的Oracle数据库(不确定是否相关)。我正在使用DBCP进行连接池。该Web应用程序在JBoss 4.2.2中运行,我们在Spring中将数据源定义为bean。
我们正在将Hibernate用于ORM。
我们偶尔会收到这样的错误消息:“ORA-02396:超出最大空闲时间,请重新连接”。
我尝试将属性添加到名为“removeAbandoned”(true)和“removeAbandondedTimeout”(120)的DBCP BasicDataSource无效。
任何帮助,将不胜感激。如果我需要提供更多信息,请让我知道-我对连接池的内部运作等不甚了解。
最佳答案
在配置数据源时,尝试将testWhileIdle
属性设置为true
。您还需要一个测试查询-对于Oracle,像select 1 from dual
这样的东西就足够了。
这将提示dbcp轻推任何空闲连接以保持它们新鲜。
如果您不介意在以后需要它们时重新创建它们,则还可以考虑撤消变为空闲的连接。看一下documentation,其中描述了minEvictableIdleTimeMillis
,timeBetweenEvictionRunsMillis
和maxIdle
/ minIdle
属性的配置选项。