2015-02-13 19 views
6

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?

+0

này nghe có vẻ như là một ý tưởng colossally xấu. – chrylis

+1

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

Trả lời

0

Cấu hình sau ia hoạt động trên hệ thống của tôi mà không cần bất kỳ LRI: câu lệnh đã chuẩn bị "S_21" không tồn tại; lỗi.Hy vọng nó giúp:

  1. pgBouncer 1.6.1, pool_mode = giao dịch
  2. Đã thêm vào Hibernate chuỗi db-kết nối: prepareThreshold = 0
  3. PostgreSQL-trình điều khiển JDBC 9,4-1203-jdbc41
  4. Disable Chuẩn bị báo cáo trong Hibernate 4.x

    <property name="hibernate.cache.use_query_cache">false</property> 
    
Các vấn đề liên quan