我们有一个企业Java项目,它大量使用Oracle数据库,支持数百个并发用户,并且在过去10年中已被数十名开发人员所接触。开发人员偶尔忘记关闭Connection,PreparedStatement或ResultSet对象,并且当用户全天使用系统时,打开的连接会累积,直到Oracle抛出“Max Open Cursors”错误。我们已将DB中的最大开放游标值增加到我们认为合适的位置。
是否有软件或技术可以扫描数千行Java代码并查找这些数据库对象保持打开的所有位置?我们希望运行一次以找到所有当前位置,然后定期查找任何新位置。提前谢谢。
答案 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),这可以自动检测这些潜在问题。