当前位置: 首页 > 知识库问答 >
问题:

在DBCP+Spring+Hibernate+JDBC中禁用准备好的语句?

武峻熙
2023-03-14

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

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

即:application->dbcp->pgbouncer->postgres

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

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

2)pgbouncer:在配置文件中设置以下属性

  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)Hibernate:无变化

6)Spring:无变化

我已经删除了所有使用prepared语句的逻辑更改。

如何防止创建其他已准备好的语句?spring或hibernate是否在内部为它们的使用创建准备好的语句?如果是,如何禁用它们?

共有1个答案

章涵容
2023-03-14

我知道这篇文章是几年前写的,但我仍然面临着同样的问题。不幸的是,建议的更改不适用于我当前的用例。

面对以下问题:-“错误:准备好的语句xxx不存在”-“错误:准备好的语句xxx已经存在”

尝试按照提议的更改进行操作,但仍然得到相同的错误:

  • Spring引导(2.1.7.发行版)
  • Spring数据(JPA+Hibernate)
  • 应用程序使用Heroku PostGRE部署在Heorku上
  • 客户端PGbouncer。
  • 使用以下属性修改了DB url:“?SSLMODE=Disable&PreparedThreshold=0&PreparedStatementCacheQueries=0”
  • 以下设置将添加到Heroku配置:
    • PGSSLMODE=禁用
    • pgbouncer_pool_mode=事务
    • pgbouncer_ignore_startup_parameters=extra_float_digits
    • 将PGBOUNCER_URLS配置值设置为数据库名称URL

 类似资料:
  • 我正在尝试使用准备好的语句和TABLE_CATALOG和table_schema的参数来选择默认模式'public'中的所有表。当我创建一个准备好的语句时,系统会返回一个错误,这没有任何意义。如果我指定了TABLE_CATALOG而不指定TABLE_SCHEMA,它可以很好地工作。另外,如果指定TABLE_SCHEMA而不指定TABLE_CATALOG,它也可以正常工作。我是不是做错什么了? 线程

  • 我正在使用JDBC执行Oracle语句,如下所示: 我在Java找到了几种称呼上面的声明的方法,主要是: > 使用OraclePreparedStatement: 使用CallableStatement: > 方法#2抛出“SQLException:Not all return parameters registered”,但是,如果我将SQL语句包装为“begin..end;”-那么方法2就很好

  • 我正在为我的sqlite日志数据库使用准备好的语句。 我的线程每50ms运行一次,将日志缓冲区中的内容写入数据库。 目前,我正在对每个线程运行一个新的准备好的语句批处理,并在所有数据线写入后关闭它们。 现在我想知道是否最好将准备好的语句保存在内存中,并仅在线程关闭/中断时关闭它? 我之所以进行这种预优化,是因为我希望这个日志线程对主应用程序性能的干扰尽可能小,我可以想象每50秒分配/解析/验证资源

  • 我有一个类,其中我使用旧的jdbc方法创建了到h2数据库的连接,该方法编写url并获取连接,我在数据库中创建了一个表,这个表不是java对象,所以我用尽了聪明的方法来为我的方法编写测试 //我还创建了一个表app_user公共void addUser(连接连接,字符串登录,字符串密码,字符串描述)抛出SQLException{ 而我的测试方法看起来像这样,有没有办法让它不那么整洁,更简单,我试图用

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?