Предположим, что процесс регистрации пользователя выглядит так:
@Service
public class UserService {
@Resource
private EmailService emailService;
@Resource
private Jmstemplate jmsTemplate;
@Transactional(rollbackFor = Exception.class)
public void signUp(User user) {
//save user to DB, etc
postSignUp(User user);
}
/**
* Business that not so important
* suppose this method may throw any exception
*
**/
public void postSignUp(User user) {
emailService.sendEmail(user);
jmsTemplate.sendSignUpEvent(user);
...
}
}
Мы делаем метод signUp () транзакционным. если в методе signUp () возникнет исключение, транзакция будет выполнена.
И, конечно, любое исключение, возникшее в postSignUp (), также приведет к откату транзакции.
Но поскольку логика в postSignUp () была не так важна, мне интересно, как можно предотвратить откат внешней транзакции, даже если в методе postSignUp () было сгенерировано исключение?