java - Sonar 要求“使用 try-with-resources 或在“finally”子句中关闭此“连接”。
问题描述
我想要一个干净的项目。所以我用声纳来检测潜在的缺陷,......
在以下方法中,Sonar 要求 : Use try-with-resources or close this "Connection" in a "finally" clause.
。
private Connection createConnection() throws JMSException {
MQConnectionFactory mqCF = new MQConnectionFactory();
...
Connection connection = mqCF.createConnection(...);
connection.start();
return connection;
}
你能解释一下我做错了什么以及如何避免声纳消息吗?谢谢你。
解决方案
Connection
实现AutoCloseable
Sonar 正在检测的(它不关心您是使用连接还是其他一些可自动关闭的东西)。
不关闭此类资源可能会导致资源泄漏,因此 Sonar 希望您执行以下操作:
//try-with-resources - the connection will be closed after this block
try(Connection connection = mqCF.createConnection(...)) {
//use connection here
}
//traditional try - the connection will be closed after the finally block
Connection connection = mqCF.createConnection(...);
try {
//use connection here
} finally {
connection.close();
}
你的问题是你只是在创建连接然后返回它 - 我强烈怀疑你想保持它打开:)
Sonar 无法确定您是否会关闭连接,因此它会抱怨。可能有办法让 Sonar 忽略这样的事情(我不经常使用它,所以我对这里的选项不太熟悉)但它仍然是一个潜在的风险,你必须以某种方式减轻。
推荐阅读
- javascript - 如何递归替换树中的项目
- laravel - 使用 facebook 登录 Laravel Socialite 会引发错误,例如: Undefined property: Laravel\Socialite\SocialiteManager::$container
- fortran - 派生类型的空数组
- python - 多处理 some_process.start() 不执行函数
- javascript - 对 ajax 请求的 json 响应错误的 PHP
- for-loop - 通过 for 循环在特定列上合并.xts
- ssl - nginx反向代理上的无限重定向循环
- javascript - 如何将浏览器的 confirm() 与 Angular 模板语句一起使用?
- php - PHP通过AJAX上传图片数据
- sed - 将 markdown 代码块标记转换为criticMarkup 语法