Я хотел бы использовать аннотацию @Transactional
(org.springframework.transaction.annotation
) для управления транзакциями. Мне нужно, чтобы откат выполнялся для каждого исключения (а не только непроверенных исключений), поэтому я использую:
@Transactional (rollbackFor = Exception.class)
Я использую режим AspectJ, и он работает нормально.
Проблема в том, что я не хочу, чтобы разработчику приходилось каждый раз добавлять атрибут rollbackFor
. Я нашел этот ответ, который предлагает расширить аннотацию @Transactional, например:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(rollbackFor=Exception.class)
public @interface TransactionalWithRollback {
}
и использовать новую аннотацию вместо исходной. Однако у меня такой подход не работает. Я не вижу, чтобы файлы AjcClosure были созданы при сборке проекта для тех методов, которые были аннотированы расширенной аннотацией. Они создаются, как и ожидалось, для методов, аннотированных исходной аннотацией транзакции.
Это решение не работает с AspectJ? Возможно, AspectJ обрабатывает только исходную аннотацию транзакции? Есть ли другое решение моей проблемы, которое может работать с AspectJ, чтобы нам не приходилось каждый раз указывать атрибут rollbackFor
?
Спасибо.