Tôi hiện đang nâng cấp một ứng dụng có sử dụng spring và hibernate.There có nhiều trường hợp ứng dụng giao tiếp với db (postgres) thông qua các câu lệnh đã chuẩn bị. Ứng dụng này cho đến bây giờ, được liên lạc với postgres qua dbcp.Tắt báo cáo đã chuẩn bị trong dbcp + spring + hibernate + jdbc?
Thay đổi: Ứng dụng hiện được liên lạc với postgres qua pgbouncer.
tức là .: ứng dụng -> DBCP -> pgbouncer -> postgres
Tôi hiểu điều này sẽ không phải là giải pháp lý tưởng nhất tức là: có 2 poolers. Nhưng do kiến trúc hiện tại, chúng tôi yêu cầu cả hai.
Yêu cầu: nhà phát triển không hỗ trợ các câu được chuẩn bị trong giao dịch chế độ & do đó phải được loại bỏ.
Thay đổi để loại bỏ tuyên bố đã chuẩn bị.
1) psql: VERSION = 9.2.6
không thay đổi
2) pgbouncer: Trong tập tin cấu hình thiết lập attribures sau
ignore_startup_parameters=extra_float_digits
pool_mode=transaction
server_reset_query=
3) jdbc: Các chuẩn bị ngưỡng đã được thiết lập cho phù hợp. ví dụ: 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) ngủ đông: không thay đổi
6) mùa xuân: không thay đổi
Số phát hành:
Kiểm tra tất cả những thay đổi này tôi vẫn thấy các câu lệnh chuẩn bị đang cố gắng tạo ra & các giao dịch không thành công do điều đó.
"ERROR: chuẩn bị tuyên bố 'S_21' không tồn tại; lồng nhau ngoại lệ là org.postgresql.util.PSQLException: ERROR: chuẩn bị tuyên bố 'S_21' không tồn tại"
Tôi đã gỡ bỏ tất cả thay đổi logic sử dụng một tuyên bố chuẩn bị.
Làm cách nào để ngăn chặn các báo cáo được chuẩn bị khác? Spring hoặc hibernate có tạo các câu lệnh chuẩn bị cho việc sử dụng của họ không? Nếu có, làm cách nào để vô hiệu hóa chúng?
này nghe có vẻ như là một ý tưởng colossally xấu. – chrylis
bạn có khắc phục được sự cố này không? Bạn có thể vui lòng đăng bài, những gì bạn đã làm để giải quyết vấn đề này? – awsome