Я создаю три услуги, как ниже: < /p>
Сервис One: < /p>
@Service
@RequiredArgsConstructor
public class TransactionAService {
private final TransactionBService transactionBService;
private final UserMapper userMapper;
@Transactional(rollbackFor = Exception.class)
public void transactionA() {
User user = new User();
user.setUsername("apple-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4));
user.setPassword("abc123");
userMapper.insert(user);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
transactionBService.transactionB();
}
});
}
}
< /code>
Служба два: < /p>
@Service
@RequiredArgsConstructor
public class TransactionBService {
private final TransactionCService transactionCService;
private final UserMapper userMapper;
@Transactional(rollbackFor = Exception.class)
public void transactionB() {
User user = new User();
user.setUsername("banana-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4));
user.setPassword("abc123");
userMapper.insert(user);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
transactionCService.transactionC();
}
});
}
}
< /code>
Сервис Три: < /p>
@Slf4j
@Service
@RequiredArgsConstructor
public class TransactionCService {
private final UserMapper userMapper;
@Transactional(rollbackFor = Exception.class)
public void transactionC() {
log.info("hello cat");
User user = new User();
user.setUsername("cat-" + UUID.randomUUID().toString().replace("-", "").substring(0, 4));
user.setPassword("abc123");
userMapper.insert(user);
}
}
< /code>
Метод transactionCservice.transactionC () < /strong> не вызывается, когда я вызывал метод TransactionAservice.TransactionA ().
Таким образом, DB имеет только два Строки (Apple-XX и Banana-XX) в таблице пользователя наконец. Большое спасибо
Подробнее здесь: https://stackoverflow.com/questions/794 ... ocation-do