【问题标题】:Executing a stored procedure asynchronously using Hibernate使用 Hibernate 异步执行存储过程
【发布时间】:2016-04-13 01:59:58
【问题描述】:

是否可以使用 Hibernate 异步调用存储过程?使用的连接应该在触发存储过程后释放,同时查询继续在 PostgreSQL 的后台运行。然后,存储过程应该将结果写入专用表中,我们以后可以从中收集它。主要目的是防止c3p0连接池的连接耗尽。

【问题讨论】:

    标签: java hibernate hibernate-4.x


    【解决方案1】:

    我不确定您是否可以使用 Hibernate 做到这一点。如果您调用该过程,程序中的流控制将暂停,直到完成。但是,您可以尝试使存储过程异步。这样,当您使用 hibernate 进行调用时,它将要求数据库启动异步作业,并且您的连接将立即释放。您还必须进行一些查询才能知道您的存储过程是否已完成。

    【讨论】:

      【解决方案2】:

      JDBC 不支持异步执行,因此 Hibernate 也不提供这样的功能。如果你想直接从一个长时间运行的存储过程调用中返回,你想在一个单独的线程中进行这个调用,甚至可以使用ThreadPoolExecutor。这将使您继续处理最初触发调用的线程。在这种情况下,您很可能还可以在执行线程中处理存储过程的结果,而不是写入临时表然后从那里读取。但是,这将取决于您的用例。 但是,您将需要一个连接,因此它不会帮助您用完池中的连接。这是一个实际的问题吗?您是否正确配置了 c3po 池以及底层数据库?

      【讨论】:

      • C3p0.配置正确。我只是想保存一个连接。我想删除数据。使用存储过程。以便。查询可以在 postgresql 的后台运行。边。并且在触发存储过程连接后应该返回连接池和。我想收集结果数据。一段时间后从单独的表中。所以。这不可能。正确的。 ?它将继续保持连接直到存储过程完成执行???
      • 还有。主要原因是。我设置了 unreturnedconnection 超时,这将允许连接打开 15 秒。这就是原因。我想触发在postgres 端运行查询的存储过程。并在存储过程调用后关闭连接
      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2011-02-25
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2017-03-03
      相关资源
      最近更新 更多