Java JIRA连接资源释放问题:SonarQube提示需关闭JiraRestClient如何解决?
报错原因
JiraRestClient实例持有HTTP连接资源,使用完成后必须主动关闭否则会造成资源泄漏,这是SonarQube触发告警的核心原因。- 你原有代码的
handle方法中重复调用了两次jiraFactory.createClient(),创建了两个未关闭的客户端实例,额外浪费资源的同时也会导致你只关一个的情况下仍然触发告警。
最优修复方案
JiraRestClient已经实现了AutoCloseable接口,直接使用Java 7+提供的try-with-resources语法即可自动完成资源关闭,无需手动编写finally逻辑,也不会再触发SonarQube告警。
1. 调整AddJIRATicketWatcherCommandHandler代码
public class AddJIRATicketWatcherCommandHandler { private final JiraFactory jiraFactory; public void handle(String jiraIssueKey, String watcher) { log.debug("Adding {} watcher to JIRA issue: {}", watcher, jiraIssueKey); // 仅创建一次客户端,try-with-resources会在代码执行完成后自动调用close方法释放资源 try (JiraRestClient jiraClient = jiraFactory.createClient()) { final Issue issue = jiraClient.getIssueClient().getIssue(jiraIssueKey).claim(); log.debug("Found JIRA issue: {}", issue.getKey()); Promise<Void> addWatcherPromise = jiraClient.getIssueClient().addWatcher(issue.getWatchers().getSelf(), watcher); addWatcherPromise.claim(); } catch (URISyntaxException e) { // 此处可根据业务需要调整异常处理逻辑,比如抛出业务自定义异常 log.error("添加JIRA工单关注者失败,工单号:{}", jiraIssueKey, e); throw new RuntimeException("JIRA操作失败", e); } } }
2. 修正createClient方法的异常声明
原有createClient方法中创建URI会抛出受检异常URISyntaxException,需要显式声明抛出:
public JiraRestClient createClient() throws URISyntaxException { log.debug("Creating JIRA rest client for remote environment"); // 移除原有无意义的空URI创建逻辑 URI jiraServerUri = new URI(StringUtils.removeEnd(jiraConfig.getJiraURI(), "/rest")); JiraRestClient restClient = new AsynchronousJiraRestClientFactory().createWithBasicHttpAuthentication(jiraServerUri, jiraConfig.getJiraUsername(), jiraConfig.getJiraPassword()); JIRA_LOGGER.info("url=[{}], username=[{}], password=[{}]", jiraServerUri.toString(), jiraConfig.getJiraUsername(), jiraConfig.getJiraPassword()); log.debug("JIRA rest client created successfully for remote environment"); return restClient; }
可选优化方案
如果你的业务场景会频繁调用添加关注者的接口,每次创建JiraRestClient开销较大,可以将JiraRestClient实例设置为单例,在应用销毁的钩子方法中统一调用close方法关闭资源,也可以解决资源泄漏的问题。
内容的提问来源于stack exchange,提问作者vdvaart
相关产品推荐
相关产品推荐

