You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java报Potential resource leak: 'factory'未关闭错误如何用try-with-resources解决

解决方案

ValidatorFactory本身已经实现了AutoCloseable接口,完全符合try-with-resources的使用要求,你直接把资源声明放到try后的小括号里即可,代码修改后如下:

try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) {
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<RenewPackageRequest>> violations = validator.validate(request);

    if (CollectionUtils.isNotEmpty(violations)) {
        error.throwValidationError(null, "Input parameters can't be null/empty");
    } else if (!YES.equalsIgnoreCase(request.getRenewPackage()) && !NO.equalsIgnoreCase(request.getRenewPackage())) {
        error.throwValidationError("RenewPackage", "parameter can only be YES/NO");
    }
}
return resource;

补充说明

  • try-with-resources会自动在代码块执行完成(不管是正常结束还是抛出异常中断)后调用factory.close()方法,不需要手动处理关闭逻辑,也不会再出现资源泄漏的告警。
  • 如果你的项目里参数校验逻辑调用频次很高,也可以考虑把ValidatorFactory做成单例全局复用,不需要每次请求都新建实例,能获得更好的性能表现。

内容的提问来源于stack exchange,提问作者None

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:36:02