我目前正在增强一个使用spring和hibernate的应用程序.有多个实例,应用程序通过预准备语句与db(postgres)进行通信.
应用程序到现在为止,通过dbcp与postgres通信.
更改:
该应用程序现在通过pgbouncer传达给postgres.
即:应用 – > dbcp – > pgbouncer – > Postgres的
我知道这不是最理想的解决方案,即:有两个普通人.但由于目前的架构,我们需要它们.
需求:
pgbouncer不支持事务模式中的预准备语句.因此必须被淘汰.
更改以消除准备好的声明.
1)psql:VERSION = 9.2.6
没变
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是否在内部为其使用创建了准备好的语句?如果是,我该如何禁用它们?
最佳答案