Spring 在dbcp+中禁用准备好的语句;弹簧&x2B;冬眠+;jdbc?
我目前正在增强一个使用spring和hibernate的应用程序。在多个实例中,应用程序通过准备好的语句与db(postgres)通信。 到目前为止,应用程序都是通过dbcp与postgres通信的 更改: 该应用程序现在通过pgbouncer与postgres通信 i、 例如:应用程序->dbcp->pgbouncer->postgres 我知道这不是最理想的解决方案,即:有两个游泳池。但由于当前的体系结构,我们需要这两种 要求: pgbouncer不支持事务模式下的准备语句,因此必须取消 更改以消除已准备好的语句 1) psql:VERSION=9.2.6 不变 2) pgbouncer:在配置文件中设置以下属性Spring 在dbcp+中禁用准备好的语句;弹簧&x2B;冬眠+;jdbc?,spring,hibernate,jdbc,prepared-statement,pgbouncer,Spring,Hibernate,Jdbc,Prepared Statement,Pgbouncer,我目前正在增强一个使用spring和hibernate的应用程序。在多个实例中,应用程序通过准备好的语句与db(postgres)通信。 到目前为止,应用程序都是通过dbcp与postgres通信的 更改: 该应用程序现在通过pgbouncer与postgres通信 i、 例如:应用程序->dbcp->pgbouncer->postgres 我知道这不是最理想的解决方案,即:有两个游泳池。但由于当前的体系结构,我们需要这两种 要求: pgbouncer不支持事务模式下的准备语句,因此必须取消 更
ignore_startup_parameters=extra_float_digits
pool_mode=transaction
server_reset_query=
3) jdbc:已相应地设置了准备好的阈值。
i、 e.: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.psql异常:错误:准备好的语句“S_21”不存在
我已经删除了所有使用预处理语句的逻辑更改
如何防止创建其他准备好的语句?
spring或hibernate是否在内部为其使用创建准备好的语句?如果是,如何禁用它们?以下配置在我的系统上正常工作,没有任何错误:准备好的语句“S_21”不存在;错误。希望有帮助:
<property name="hibernate.cache.use_query_cache">false</property>
false
我知道这篇文章是几年前写的,但我仍然面临同样的问题。不幸的是,建议的更改不适用于我当前的用例 面临以下问题: -“错误:准备好的语句xxx不存在” -“错误:准备好的语句xxx已存在” 尝试遵循建议的更改,但仍然得到相同的错误: 技术堆栈:
- 弹簧防尘套(2.1.7.释放)
- Spring数据(JPA+Hibernate)
- 该应用程序使用Heroku Postgre部署在Heorku上
- 客户端PgBouncer
- 使用以下属性修改了数据库url:“?sslmode=disable&prepareThreshold=0&preparedStatementCacheQueries=0”
- 以下设置添加到Heroku配置中:
- PGSSLMODE=禁用
- PGBOUNCER_池_模式=事务
- PGBOUNCER\u忽略\u启动\u参数=额外\u浮动\u位数
- 将PGBOUNCER_URL配置值设置为DB名称URL
- Spring数据设置为使用两个数据库(读/写&读)李>
- 将@Transactional(readOnly=true)与周围的
@一起使用(“@annotation(Transactional)”) 公共对象继续(ProceedingJoinPoint ProceedingJoinPoint,事务性)抛出可丢弃{ 试一试{ if(transactional.readOnly()){ RoutingDataSource.setReplicaRoute(); info(“路由数据库调用读取副本”); } return proceedingJoinPoint.procedure(); }最后{ RoutingDataSource.clearReplicaRoute(); } }