Я использую пружинную загрузку с пружинными данными jpa.
@Component
public class NotificationReceiver {
private final NotificationService service;
private final NotifMapper mapper;
@JmsListener(destination = "${mq.notif.queue}")
public void receiveMessage(NotificationPayload notif) {
Notification notif = mapper.NotificationPayloadToNotification(notif);
notif = service.insertNewNotif(notif); //1
...
notif=service.update(notif); // 2
service.sendMq(notif); // 3
}
}
На самом деле,
insertNewNotif и update имеют транзакционную аннотацию
, что я хотел бы сделать
- Если 1 не удастся, я не хочу откатываться, я не хочу делать 2 и 3
- Если 2 не удастся, я не хочу откат 1 и не хочу сделать 3
- Если сбой 3, я не хочу откат 1 и 2
Возможно, потребуется изменить
@Transactional
на
@Transactional(propagation = Propagation.REQUIRES_NEW) ?
Не уверен, но если я не продолжу работу, если произойдет сбой, нужно будет отследить ошибку хранилища?
Как соблюдать эти критерии?