У меня есть аспект ведения журнала, определенный для конкретной службы. Я использую Spring AOP и советую несколько методов обслуживания для регистрации определенных событий приложения, связанных с этими вызовами методов.
Например, я использую аннотацию @AfterThrowing для обнаружения сбоев в вызовах методов, чтобы я мог соответствующим образом регистрироваться. Мои методы обслуживания помечены @ Transactional.
Как вы, вероятно, можете сказать, очень важно, чтобы логика аспекта журналирования вызывалась после фиксации транзакции, иначе мой аспект журналирования пропустил бы любые ошибки, связанные с неудачными транзакциями при фиксации. Хуже того, любые сообщения журнала, связанные с успешным вызовом метода, будут записываться, даже если метод фактически завершился неудачей после фиксации транзакции.
У меня это отлично работает, так как я правильно определяю приоритет порядка сторон. Моя самая большая проблема заключается в том, что я хочу написать тест (интеграционный тест кажется единственным вариантом), который категорически подтвердит, что приоритет заказа выполняется. Учитывая, что приоритет порядка - это конфигурация, легко предвидеть, что кто-то придет в будущем и настроит конфигурацию, не осознавая, что он нарушает критический код.
Итак, моя теория состоит в том, что мне нужно написать тест, который намеренно вызывает сбой транзакции при фиксации, а затем проверяет, что логика в моих журналах @AfterThrowing вызывается впоследствии.
Кто-нибудь когда-нибудь сталкивался с этой необходимостью раньше? Я уверен, что это обычный сценарий при использовании АОП.