5

我在 Websphere 服务器上托管了一个数据源,我想通过我的应用程序客户端使用该数据源。

从 JNDI 数据源检索数据库连接后,我将连接的提交设置更改为 false。之后,我将使用此连接,并在完成任务后关闭连接。

如果我忘记在关闭之前更改连接的提交设置会发生什么(我的意思是将连接返回到池中)。如果任何其他客户端访问此数据源并获得相同的连接,提交设置是否仍然存在,或者服务器是否会重置这些连接设置。

4

2 回答 2

4

通常,池中的连接使用特定于 AS 的实现进行包装,以防止客户端过于侵入。当在连接上调用特定方法时,它被认为是“脏的”,并且可能不会返回到池中,而是关闭并重新创建,或者如果可能的话重置为原始状态。通常有关于如何处理这些情况的设置,例如在 Weblogic 中删除受感染的连接。

不过,这些自我清洁的效果也可能取决于驱动程序。因此,我建议您使用 1 连接池进行简单测试。将连接设置为 autocommit=false,不要关闭它,退出并尝试从另一个客户端使用它,并通过测试检查 autocommit 属性的实际状态。

要考虑的另一件事是该 AS 包装器中的 Connection.close() 不会关闭连接,而是将其放入池中。因此,如果您的客户端在调用 close() 之前断开连接(并在此之前设置自动提交),则该连接可能对其他池客户端不可用,从而造成连接泄漏。

于 2011-04-02T14:00:41.543 回答
0

在 Apache Tomcat + Postgres 上测试 - 如果defaultAutoCommit未指定 server.xml <Resource ..../> - 返回的数据库连接保持修改状态,也就是说,您必须conn.setAutoCommit(true);在关闭(返回)之前手动设置它。但defaultAutoCommit="true"在这种情况下有所帮助。Apache Tomcat 7 - Tomcat JDBC 连接池 说明defaultAutoCommit- "(boolean) 此池创建的连接的默认自动提交状态。如果未设置,则默认为 JDBC 驱动程序默认值(如果未设置,则不会调用 setAutoCommit 方法。 )"

于 2021-11-19T13:42:20.253 回答