数据库:db2,Application Server:websphere 8
我们有更新/检索数据库中的值的休息服务。该服务每天最多使用两次。因此,其余通话之间的时间间隔将近24小时。
对于每个第一个/第二个请求,它都会抛出staleConnection
个异常。
第三次重试通过。
在下面链接中指定了所有内容。
How to handle stale connections?
http://www.thejavacode.com/websphere-adapters-stale-connection-problem-t34.html
但仍然有staleConnection
例外。我们正在使用Spring JDBC,因此我没有看到在使用后没有关闭连接的问题。另外,我在单个请求中编写了重试逻辑,以便在遇到连接异常时尝试获取有效连接三次。
第一次遇到staleconnection
异常时,服务等待三秒并重试连接,但后续重试正在抛出
ObjectClosedException:DSRA9110E:连接已关闭。
我怀疑后续重试是否正在尝试打开现有陈旧连接。 如何解决这个问题?
如果我包含错误的标签,我道歉。
答案 0 :(得分:2)
#1解决方案是:不要导致连接过时。 DB2驱动程序或服务器中有 nothing 导致这种情况发生。 99%的过时连接是由具有TCP超时的防火墙损坏引起的。修复防火墙产品的已用网络路由的超时设置。
#2解决方案是:
SELECT current date FROM sysibm.sysdummy1
)答案 1 :(得分:1)
我同意回答(user918176),只是想添加另一个解决问题的简单设置,为了完整性;将最小连接池大小设置为零。
StaleConnectionException
通常在一段时间不活动后发生(如早上的第一次请求,午休后),在此期间某些网络设备终止底层TCP连接。
将最小池大小设置为零会导致在相当短的时间段之后丢弃所有旧连接(在unused timeout
之后,默认情况下在上次使用连接后1800秒)。所以在不活动期后,池中没有简单的连接(否则会过时)。此解决方案导致最小配置更改和最小性能命中(仅在非活动时段之后的第一个请求等待重新初始化数据库连接而不是获得即用连接)。
答案 2 :(得分:0)
将最小连接池调整为0,默认值为1。