在Java代码中找到数据库连接的最佳方法是什么?

时间:2012-11-20 14:05:24

标签: java oracle jdbc database-connection prepared-statement

我们有一个企业Java项目,它大量使用Oracle数据库,支持数百个并发用户,并且在过去10年中已被数十名开发人员所接触。开发人员偶尔忘记关闭Connection,PreparedStatement或ResultSet对象,并且当用户全天使用系统时,打开的连接会累积,直到Oracle抛出“Max Open Cursors”错误。我们已将DB中的最大开放游标值增加到我们认为合适的位置。

是否有软件或技术可以扫描数千行Java代码并查找这些数据库对象保持打开的所有位置?我们希望运行一次以找到所有当前位置,然后定期查找任何新位置。提前谢谢。

4 个答案:

答案 0 :(得分:3)

您可以尝试在源代码上运行FindBugs,这应该可以获取任何未关闭的连接。它在这里找到了一个错误列表:

http://findbugs.sourceforge.net/bugDescriptions.html

寻找以ODR开头的那些。

答案 1 :(得分:1)

这取决于您是否使用任何ConnectionPooling机制。如果是,则连接池将检查所有打开的连接。如果您已经实现了自己的池,那么您需要重新访问代码以包含此检查。

答案 2 :(得分:0)

FindBugs有两个“错误模式”:

http://findbugs.sourceforge.net/bugDescriptions.html#ODR_OPEN_DATABASE_RESOURCE http://findbugs.sourceforge.net/bugDescriptions.html#ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH

答案 3 :(得分:0)

Findbugs一直擅长检测未正确关闭的连接以及许多其他问题。

我们将其用作maven插件,在“网站”目标期间调用。结合持续集成工具(如Jenkins),这可以自动检测这些潜在问题。