问题描述
我想要一个干净的项目.所以我用 Sonar 来检测潜在的缺陷,...
I want to have a clean project. So I used Sonar to detect potential defects, ...
在以下方法中,Sonar 要求:使用 try-with-resources 或在finally"子句中关闭此连接"..
On the below method, Sonar asks to : 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; }
你能解释一下我做错了什么以及如何避免声纳消息吗?谢谢.
Can you explain me what I did wrong and how to do to avoid Sonar message? Thank you.
推荐答案
在java中,如果你使用FileInptStream, Connection, ResultSet, Input/OutputStream, BufferedReader, PrintWriter等资源 你必须关闭它在垃圾收集发生之前.所以基本上每当连接对象不再使用时,您都必须关闭它.
In java if you are using resource like FileInptStream, Connection, ResultSet, Input/OutputStream, BufferedReader, PrintWriter you have to close it before garbage collection happens. so basically whenever connection object no longer in use you have to close it.
试试下面的片段
Connection c = null; try { c = mqCF.createConnection(...); // do something } catch(SomeException e) { // log exception } finally { try { c.close(); } catch(IOException e1){ // log something else } } //try-with-resources try(Connection connection = mqCF.createConnection(...)) { //use connection here }
在try with resource的情况下连接会被jvm自动关闭,但是Connection接口必须扩展成AutoCloseable/Closable接口.
In the try with resource case connection will automatically close by jvm, but Connection interface must be extends with AutoCloseable / Closable interface.