Мы тестируем введение некоторых правил SonarQube в нашу кодовую базу, которые связаны с пометкой открытий соединений, которые не закрыты в блоках catch или finally и пропущены. возможности использования try-with-resources. Правила отмечают следующий блок кода:
final Connection Connection = jThalesDs.getConnection(); окончательный ReadedStatement pstmt = Connection.prepareStatement(String.format(GET_SERVER_IDS_AND_TEST_LOGINS, dbSchemaProps.getOracleJThales())); пытаться { // Некоторые вызовы, которые могут или не могут что-то выдать } catch(Throwable exc){ // Закрываем ресурсы и повторно выбрасываем исключение пстмт.закрыть(); соединение.закрыть(); бросить отл; } // Упс, забыл добавить блокfinally, в котором мы закрываем соединения. Что можно проверить по этому снимку экрана:

Однако в том же файле более серьезное нарушение того же правила не помечается как ошибка или запах кода, и вместо этого SonarQube фокусируется на универсальности создаваемого класса (RuntimeException ):
final Connection conn = jThalesDs.getConnection(); пытаться { testLoginsPerServerId = healthCheckService.getTestLoginsPerServerId(conn); } catch (Throwable ex) { // Упс, забыл закрыть соединение, если оно не равно нулю! выдать новое RuntimeException (TEST_LOGINS_DB_ERROR, ex); }

Итак, подведем итоги. В том же файле у меня есть ошибка и запах кода, который является обнаруженным SonarQube, и это касается того факта, что я не закрываю ресурсы в блоке finally. Однако при еще более серьезном нарушении тех же правил в том же файле эти правила не срабатывают.
Что здесь может происходить?
Мобильная версия