2015-02-13 1 views
6

В настоящее время я улучшаю приложение, использующее spring и hibernate. Есть несколько экземпляров, где приложение общается с db (postgres) с помощью подготовленных операторов. Приложение до сих пор, связанное с postgres через dbcp.Отключение подготовленных операторов в dbcp + spring + hibernate + jdbc?

Изменить: Приложение теперь передано postgres через pgbouncer.

т.е .: приложение -> ГСБД -> pgbouncer -> Postgres

Я понимаю, это не было бы самым идеальным решением т.е.: с 2 poolers. Но из-за текущей архитектуры мы требуем их обоих.

Требования: pgbouncer не поддерживает подготовленные заявления в сделке режима & поэтому должен быть устранен.

Изменения, устраняющие подготовленный отчет.

1) PSQL: версия 9.2.6 =

без изменений

2) pgbouncer: в конфигурационном файле установить следующие attribures

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) ДБХП: poolPreparedStatements = ложные maxOpenPreparedStatements = 0

5) спящий режим: не изменяет

6) пружина: не изменяет

Вопрос:

Несмотря на все эти изменения, я все еще вижу подготовленные заявления, которые пытаются быть созданы. & транзакций, не соответствующих этому.

«ОШИБКА: подготовлено заявление„S_21“не существует, вложенное исключение org.postgresql.util.PSQLException: ОШИБКА: подготовлено заявление„S_21“не существует»

Я удалил все логические изменения который использовал подготовленное заявление.

Как я могу предотвратить создание других подготовленных утверждений? Является ли весна или спящий режим внутренне создавать подготовленные заявления для их использования? Если да, как их отключить?

+0

Это звучит как колоссально плохая идея. – chrylis

+1

Вы решили эту проблему? Можете ли вы отправить сообщение, что вы сделали, чтобы решить эту проблему? – awsome

ответ

0

Следующая конфигурация ia работает на моей системе без ОШИБКА: подготовленная инструкция «S_21» не существует; ошибки.Надеюсь, что это помогает:

  1. pgBouncer 1.6.1, pool_mode = транзакция
  2. Добавлена ​​Hibernate строку дб-соединения: prepareThreshold = 0
  3. Postgresql-9.4-1203 JDBC-драйвер jdbc41
  4. Отключить Получали заявления в спящем 4.x

    <property name="hibernate.cache.use_query_cache">false</property> 
    
Смежные вопросы