java - 为什么 sonarqube 不会产生未关闭连接的问题?

标签 java sonarqube

我正在测试 Sonar 以确保关闭数据库连接。

我正在使用嵌入式 Maven 版本 3.3.9 从 Eclipse 执行 Maven 目标“sonar:sonar”。使用 sonarqube 6.2 和 sonar-java-plugin-4.10.0.10260.jar。

使用此代码

package servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class STestClosingResources extends HttpServlet{

    private static final long serialVersionUID = 1L;

    public final void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {
        Connection con = null;
        ResultSet rsGet = null;
        PreparedStatement psGet = null;
        try {
            InitialContext ctx = new InitialContext();
            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/testci");
            con = ds.getConnection();

            psGet = con.prepareStatement("SELECT * FROM TEST");
            rsGet = psGet.executeQuery();
            int counter = 0;
            while (rsGet.next()) {
                counter++;
                System.err.println(counter);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rsGet != null) {
                    rsGet.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            rsGet = null;
            try {
                if (psGet != null) {
                    psGet.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            psGet = null;
        }
    }
}

我没有得到我预期的这个问题:

Close this "Connection" in a "finally" clause.

为什么?

非常感谢

最佳答案

负责分析 Java 代码并检测此问题的 SonarJava 分析器无法识别 DataSource.getConnection 返回需要关闭的 Connection。我创建了票来修复它 https://jira.sonarsource.com/browse/SONARJAVA-2355

关于java - 为什么 sonarqube 不会产生未关闭连接的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650648/

相关文章:

java - SpringMVC/mockMVC/jsonpath 比较字符串列表

java - 如何在 freemarker 中将日期转换为字符串?

c# - VS 2017 RC C# 的 SonarQube 误报 S1450

java - Eclipse 调试器在每次重新发布时暂停

java - 创建名称为 'musicDao' : Injection of autowired dependencies failed 的 bean 时出错

java - 如何将smartGWT(表示层)与Spring服务集成?

java - 无法使用最新版本启动 Sonarqube 服务器

java - SonarQube:使用 API/Web 服务分析项目

java - Manuel 在 Sonarqube 上测试代码覆盖率

java - 规则的 Sonar 名称 [repository=xxx key=yyy] 为空