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

是否应该在长时间事务中的每次查询后关闭连接?

戚均
2023-03-14

我们目前正在处理这个函数,它必须部分使用数据库,部分使用服务,而这些操作非常耗时。所以,一般来说,这里有一个事务性方法,其代码如下:

Connection conn = null;
try {
  conn = getConnection(); // This I get from the connection pool
  Employee emp = queryDatabase(id); 
  // Point A - ??
  Response resp = makeLongTimeServiceCall(emp);
  // Point B - ??
  anotherQueryDatabase(resp);

} catch (Exception e) {
  throw e; // And this also rolls back the transaction
} finally {
  // If conn is not closed, close it, so there would be no leaks
}

所以最大的问题是——我是否应该在A点关闭连接,然后从B点的连接池再次获取它,以便其他servlet可以在我与服务交互时使用该连接?我的猜测是应该的,但这会损害我的事务吗?

共有3个答案

满增
2023-03-14

数据库连接不应保持打开状态。在需要执行查询时打开连接,并尽早将其关闭。所以我的解决方案是,是的。

皇甫浩壤
2023-03-14

如果您没有事务,可以关闭连接,并在需要时请求新连接。

请记住,如果您使用的是连接池,关闭连接不会真正关闭连接,而只会将其标记为可供其他线程重用。

刁远
2023-03-14

在许多情况下:是的,关闭和重新打开连接听起来不错。但是,您需要理解在两个单独的事务中执行这些操作的含义(通过关闭和重新打开连接,您本质上是在单独的事务中执行这些操作)。

如果另一个用户调用一个操作来更改您在B点的数据状态,最终结果是否仍然正确?

 类似资料:
  • 我有一个使用SpringLDAP 1.3.1的应用程序。它在启动时在Spring上下文中创建LdapTemplate,并将其传递给我的应用程序。我连接的LDAP字符串实际上是一个VIP设备,后面有多个Active Directory服务器。 该应用程序用于创建组层次结构,并分几个步骤进行。首先,它创建任何新组,然后删除任何删除的组,然后更新和更改组,最后更新任何新组或移动组的父级。 在最后一步中,

  • 我已经编写了一个Web服务使用在Glass 在GlassFishe.我从数据源获取数据库连接,并将其传递给jOOQ。 在请求结束时(基于这个问题),我关闭与Apache DBUtils的连接: 问题是我只能发送一个请求。之后,我得到连接关闭异常。GlassFish中的连接池配置为: 我正在关闭物理连接吗?我正在使用MySQL 5.5。32戴软呢帽19戴玻璃鱼4建89。有人能帮忙吗? [更新] 我已

  • 问题内容: 如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件。 问题答案: 经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在ADO.NET中嵌套事务。尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误。 要查看连接当前是否在事务中,可以执行以下操作: 这将返回嵌套事务的数量。 请注意,您可以手动嵌套事务,而无需使用SqlTrans

  • 我有: < Li > Camel route(transactioned = true),从MQ队列消费 < li >使用Spring的websphereowtransactionmanager < li >事务性起作用 < li >在IBM Liberty上运行 但是,我收到以下消息: 这似乎与另一个堆栈溢出问题有关,但我已经尝试更改服务器中的配置。xml,但没有成功。

  • 我正在创建一个固定大小的线程池,包含10个线程,如下所示: 现在,在生成10个线程之后,每个线程都会执行一个runnable。这里的Runnable由工厂提供。得到() 现在,我想做一件事,一旦一个线程被关闭,也就是说,它完成了一个任务,它就会再次选择另一个runnable并开始运行它。因此,基本上检查所有10个线程的状态,并在线程关闭时再次执行runnable。 我知道我可以这样做,在其中我可以

  • 我读过很多帖子,人们说在java、语句等中关闭连接,但我没有找到我的问题的答案。 我问我不做Con.close(),但我做所以它会关闭连接或不? 所以我只想知道,当我们关闭结果集时,连接是否会关闭?