Sonar 要求“使用 try-with-resources 或关闭此“连接".在“终于"中条款."

2022-01-17 00:00:00 sonarqube java

我想要一个干净的项目.所以我用 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.

相关文章