【发布时间】:2011-07-30 08:26:02
【问题描述】:
我们有一个 spring bean,它在启动时从 Postgresql (8.4) 数据库加载应用程序消息。
Bean 定义如下:
代码非常简单:
get a connection (we are using a dbcp pool)
Create a statement (plain jdbc, nothing special)
execute the query, get the result set
while(resultSet.next())){
cacheMap.put(resultSet.getString("column1"), resultSet.getString("column2"));
}
代码有时会在应用程序启动时在 while 循环内引发 ResultSet is closed 异常。
它使用 Postgresql 8.4.2 可以正常工作,没有任何异常,但在使用 Postgresql 8.4.8 时大多数时间(并非总是)抛出异常。
我们在运行 windows 7 或 2008 服务器、Tomcat 6.0.32、最新版本的 java 1.6 的 4 台不同计算机上对其进行了测试,所有数据库服务器都在同一台机器上运行。
结果集包含大约 8000 行(两列;字符变化(200)和字符变化(1000))。
这里有什么问题?
- 在我们处理完结果集之前,池是否可能正在关闭连接或重新使用它?
- 或者它可能与数据库版本有关?
顺便说一下,我们更改了代码以在第一次使用消息而不是应用程序启动时加载消息,并且它工作正常。因此,只有在启动时调用代码时才会引发此异常,使用 init 方法。
提前致谢
【问题讨论】: