Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在dbcp+中禁用准备好的语句;弹簧&x2B;冬眠+;jdbc?_Spring_Hibernate_Jdbc_Prepared Statement_Pgbouncer - Fatal编程技术网

Spring 在dbcp+中禁用准备好的语句;弹簧&x2B;冬眠+;jdbc?

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不支持事务模式下的准备语句,因此必须取消 更

我目前正在增强一个使用spring和hibernate的应用程序。在多个实例中,应用程序通过准备好的语句与db(postgres)通信。 到目前为止,应用程序都是通过dbcp与postgres通信的

更改: 该应用程序现在通过pgbouncer与postgres通信

i、 例如:应用程序->dbcp->pgbouncer->postgres

我知道这不是最理想的解决方案,即:有两个游泳池。但由于当前的体系结构,我们需要这两种

要求: pgbouncer不支持事务模式下的准备语句,因此必须取消

更改以消除已准备好的语句

1) psql:VERSION=9.2.6

不变

2) 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”不存在;错误。希望有帮助:

  • pgBouncer 1.6.1,池模式=事务
  • 已添加到Hibernate db连接字符串:prepareThreshold=0
  • Postgresql JDBC 9.4-1203-jdbc41驱动程序
  • 在Hibernate 4.x中禁用准备好的语句

    <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();
      }
      }

    这听起来是个非常糟糕的主意。您解决了这个问题吗?你能不能发布一下,你做了什么来解决这个问题?