gpt4 book ai didi

java - 使用什么来确保连接池始终关闭?

转载 作者:行者123 更新时间:2023-11-30 11:21:17 24 4
gpt4 key购买 nike

我知道使用终结器是一件坏事,即使对于连接关闭(Is closing the connection in finalize best practice?)也是如此,因为它们不能保证被调用。但是,如果您的连接是通过连接池合并的呢?就我而言,我使用 Apache Commons 池 ( http://commons.apache.org/proper/commons-pool/ ) 来汇集 SFTP 连接。我不能使用 try-with-resources 技术,因为不应在每次尝试结束时关闭每个连接(这样它可能会被池重新用于下一个操作)。

我确实提供了一个调用 pool.close() 的 closePool() 方法,这样使用我的代码的任何程序员都可以调用它,但是如果她/他忘记这样做怎么办?从终结器调用此方法是尝试关闭连接池的最佳解决方案,以防万一它不是手动完成的,还是有更好的方法? shutdown hook 会更好吗?

最佳答案

如果您正在编写一个向其他人提供此功能的库,我真的看不出除了提供 closePool() 方法之外您还能做什么。您也许可以让您的类继承自 java.io.Closeable和/或 AutoCloseable ,但除了宣传需要清理您的资源之外,您主要必须依靠使用您的代码的开发人员来做正确的事情。

如果未正确实现,库代码中的意外终结器可能是一件令人讨厌的事情。

您可以尝试添加一个关闭 Hook ,但如果 JVM 无论如何都在关闭,那么此时强行关闭连接池就没有多大意义了。

关于java - 使用什么来确保连接池始终关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com