使用一种方法返回Connection
是一种常见的做法,
例如,在光(Hikari)的HikariConnectionProvider
public Connection getConnection() throws SQLException { Connection conn = null; if (this.hds != null) { conn = this.hds.getConnection(); } return conn; }
但是Sonar警告关闭连接
实现Closeable接口或其超级接口AutoCloseable的连接,流,文件和其他类在使用后需要关闭。此外,必须在finally块中进行关闭调用,否则异常可能会阻止调用。
我想返回一个以后可以使用的连接,所以我不能在那些方法中关闭它
如何/是否可以避免在主要方法上发出此类警告以返回有效连接?
编辑 在Sonar社区中添加了一个误报性错误:S2095 report on method return Connection
答案 0 :(得分:1)
我在与mongodb建立连接时遇到了类似的问题。因此,当我使用spring时,我刚刚创建了连接对象Autowired
。
通过这种方式,连接对象的生命周期由spring管理,我们不必显式关闭连接。
答案 1 :(得分:0)
从技术上讲,SonarQube(在本例中为SonarJava分析器)不能保证最终关闭此方法返回的连接-因此出现了问题。
如果您确信自己的代码库在其他地方有所有必需的资源清理代码,那么我的建议是在SonarQube UI中将此特定问题标记为Won't fix
。