2015-02-13 15 views
6

Attualmente sto migliorando un'applicazione che utilizza molla e ibernazione. Esistono più istanze in cui l'applicazione comunica con il db (postgres) tramite istruzioni preparate. L'applicazione fino ad ora, comunicata con postgres via dbcp.Disabilitazione delle istruzioni preparate in dbcp + spring + hibernate + jdbc?

Modifica: L'applicazione ora comunicata a postgres tramite pgbouncer.

cioè .: applicazione -> DBCP -> -> pgbouncer postgres

ho capito che questo non sarebbe la soluzione più ideale cioè: avere 2 poolers. Ma a causa dell'attuale architettura richiediamo entrambi.

Requisito: pgbouncer non supporta istruzioni preparate in transazione modalità & devono quindi essere eliminati.

Modifiche per eliminare la dichiarazione preparata.

1) psql: VERSION = 9.2.6

nessun cambiamento

2) pgbouncer: Nel impostato il file di configurazione seguenti attribures

ignore_startup_parameters=extra_float_digits 
    pool_mode=transaction 
    server_reset_query= 

3) jdbc: Il preparato la soglia è stata impostata di conseguenza. cioè: 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 = falsi maxOpenPreparedStatements = 0

5) invernano: non cambia

6) molla: non cambia

Edizione:

Malgrado tutte queste modifiche, vedo ancora le dichiarazioni preparate che tentano di creare transazioni non riuscite a causa di ciò &.

"ERRORE: preparato dichiarazione 'S_21' non esiste; eccezione annidata è org.postgresql.util.PSQLException: ERRORE: preparato dichiarazione 'S_21' non esiste"

Ho rimosso tutte le modifiche logiche quello ha usato una dichiarazione preparata.

Come è possibile impedire la creazione delle altre istruzioni preparate? In primavera o in ibernazione vengono create internamente istruzioni preparate per il loro utilizzo? Se sì, come posso disabilitarli?

+0

questo suona come una colossale cattiva idea. – chrylis

+1

hai risolto questo problema? Puoi postare per favore, cosa hai fatto per risolvere questo problema? – awsome

risposta

0

La seguente configurazione ia funziona sul mio sistema senza alcun ERRORE: l'istruzione preparata "S_21" non esiste; errori.Speranza che aiuta:

  1. pgBouncer 1.6.1, pool_mode = transazione
  2. Aggiunto a Hibernate stringa di db-connection: prepareThreshold = 0
  3. Postgresql-driver JDBC 9,4-1.203-jdbc41
  4. Disabilita Preparato dichiarazioni in Hibernate 4.x

    <property name="hibernate.cache.use_query_cache">false</property>