現在、Spring と Hibernate を使用するアプリケーションを拡張しています。アプリケーションが準備済みステートメントを介してデータベース (postgres) と通信するインスタンスが複数あります。これまでのアプリケーションは、dbcp 経由で postgres と通信していました。
変更: アプリケーションは、pgbouncer を介して postgres と通信するようになりました。
つまり、アプリケーション -> dbcp -> pgbouncer -> postgres
これが最も理想的な解決策ではないことは理解しています。つまり、2つのプーラーを持つことです。しかし、現在のアーキテクチャのため、両方が必要です。
要件: pgbouncer はトランザクションモードでのプリペアド ステートメントをサポートしていないため、削除する必要があります。
準備済みステートメントを削除するための変更。
1) psql: バージョン = 9.2.6
変化なし
2) pgbouncer: 構成ファイルで、次の属性を設定します。
ignore_startup_parameters=extra_float_digits
pool_mode=transaction
server_reset_query=
3) jdbc : 準備されたしきい値は、それに応じて設定されています。すなわち:jdbc:postgresql://localhost:6541/postgres?prepareThreshold=0
JAVA VERSION = 1.7.0_51
JDBC DRIVER = postgresql-9.3-1102.jdbc41-3.jar
4) dbcp : poolPreparedStatements = false maxOpenPreparedStatements = 0
5) 休止状態:変更なし
6) 春 :変更なし
問題:
これらすべての変更にもかかわらず、準備されたステートメントが作成されようとしており、そのためにトランザクションが失敗しているのをまだ見ています。
「エラー: 準備されたステートメント "S_21" は存在しません; ネストされた例外は org.postgresql.util.PSQLException: エラー: 準備されたステートメント "S_21 " は存在しません」
準備済みステートメントを使用したすべての論理変更を削除しました。
他の準備済みステートメントが作成されないようにするにはどうすればよいですか? spring または hibernate は、使用のために準備されたステートメントを内部的に作成しますか? はいの場合、それらを無効にするにはどうすればよいですか?