起動時にPostgreSQL(8.4)データベースからアプリケーションメッセージをロードするSpring Beanがあります。 ビーン定義は次のようである: <豆....のinitメソッド=「loadMessages」>予期しないResultSetがSpring Webアプリケーションで閉じられた例外です
コードが前方にかなりまっすぐである:
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"));
}
コードは、時々、ResultSetが内部閉鎖例外でスローアプリケーションの起動時にループします。 PostgreSQL 8.4.2を使用しても例外なく正常に動作しますが、PostgreSQL 8.4.8を使用している場合はほとんどの場合例外をスローします。
Windows 7または2008サーバー、Tomcat 6.0.32、最新バージョンのJava 1.6、すべてのデータベースサーバーが同じマシン上で実行されている4台のコンピューターでテストしました。 結果セットには、約8000行(2つの列、文字可変(200)および文字可変(1000))が含まれています。 ここで何が間違っていますか?
- 結果セットの処理が完了する前に、プールが接続を閉じているか、再利用している可能性はありますか?
- また、データベースのバージョンに関連するものもありますか?
ところで、メッセージはアプリケーションの起動ではなく初めて使用されたときにロードされるように変更されています。正常に動作しています。この例外は、init-methodを使用して、起動時にコードが呼び出された場合にのみ発生します。事前
でおかげ
あなたの答えをありがとう。我々は春だけで管理されている豆を使用しています。結果セットでクローズされた例外はスローされません。キャッシュには部分的にデータが取り込まれます。たとえば、通常8k行を持つ場合、2k行程度(実際の数値ではありません)を処理した後に例外がスローされます。どういうわけか結果セット、私は文がループ中に閉じていると思う。ドキュメンテーションによると、同じ接続で別のクエリが実行された場合、この文は閉じられます。接続プールは別のクエリを実行する別のスレッドに接続を渡しているかもしれません。しかし、このシナリオは私には意味がありません。 –