我想覆盖连接接口中的一些方法,以便在调用连接对象上的提交时关闭 preparedStatements 和 resultSets。我的代码库中有很多资源泄漏,作为故障保护,我想实现这个解决方案,在每次提交时,我都可以查找所有打开的语句和结果集并关闭它们。但是,在这种情况下,我没有一个类可以在所有其他方法上覆盖和调用 super() 。作为连接返回的对象是动态代理 - com.sun.proxy.$Proxy。不确定如何为这个对象调用我自己的方法。任何线索都受到高度赞赏。PS:我在项目中使用的是ojdbc8的jar,是最近从ojdbc7升级而来的。据我所知,我们在以前的版本中从未遇到过任何资源泄漏问题(例如超出最大打开游标数)。
2 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
您的 JDBC 库是开源的吗?然后下载 JDBC 版本的源代码,更改这一代码,再次生成 JAR 并使用它。当您这样做时,问题是代码中的所有“关闭”调用不再是合法的关闭类,而是冗余调用,在这种情况下,我不知道 JDBC 是否会再抛出一个异常(类似于'连接已经关闭')或没有,但如果是,你需要抑制异常或其他东西。
但这里的基本思想是您正在修改源代码,这是有风险的。
现在,即使你找到了一个通用的修复,下一个问题是关于影响的,包括你在内的任何人都不能说出这个的影响,其他人应该批准这个改变(假设这是一个大代码并且是某个项目)。
因此,与其做这样的事情并引发新问题,不如接受这样一个事实,即过去有人做过一些糟糕的工作,我们现在以正确的方式解决它。
我知道这正是您在这里要避免的,那么我认为您应该尝试修改 JDBC 源并试一试。一切顺利!
MMTTMM
TA贡献1869条经验 获得超4个赞
如果您只是想查找泄漏,为什么不改用调试器呢?您可以在每个相关方法上设置断点并查看调用它们的位置,然后继续检查以确保它们已正确关闭。作为一个额外的好处,如果有任何边缘情况阻止正确关闭,您将只是单步执行相关代码,因此您可以更快地找出需要修复的内容。
添加回答
举报
0/150
提交
取消