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
相关产品推荐
相关产品推荐

