如何避免PMD CloseResource违规?

Aur*_*rea 5 pmd

我正在修改我的应用程序代码以尊重pmd规则.我在此代码中有一个关闭资源错误:

Connection c = DataSourceUtils.getConnection(dataSource);
Statement request = null;
try {
    request = c.createStatement();
    request.execute(loadDataRequest);
} catch (SQLException e) {
    dataLogger.error(e);
    throw e;
}
Run Code Online (Sandbox Code Playgroud)

所以我搜索并找到了一个apache实用程序来避免它:DButils我的代码变成了这样

Connection c = DataSourceUtils.getConnection(dataSource);
Statement request = null;
try {
    request = c.createStatement();
    request.execute(loadDataRequest);
} catch (SQLException e) {
    dataLogger.error(e);
    throw e;
} finally {
    DbUtils.closeQuietly(request);
    DbUtils.closeQuietly(c);            
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然在日食和声纳报告中获得PMD警报!你知道如何永久修复它吗?

Jea*_*sky 1

问题是 PMD 不知道 closeQuietly() 关闭连接。这并不是那么聪明,因为如果你的方法被命名为 close() 你也会遇到同样的问题。由于它是一个 Java 规则,因此更改实现并不容易,因为这样您就必须重新打包 Eclipse 和 Sonar PMD 插件才能识别您的规则副本。

您的选择:1) 添加 //NOPMD 注释以抑制 2) 重构代码以获取/关闭超类中的连接,这样您就只能拥有一次。