Я создаю нового пользователя, и после этого, когда я создаю профиль для пользователя с помощью createProfileRequest()
, и служба возвращает мне ошибку, пользователь не откатывается
@Transactional(rollbackFor = {RestClientException.class, IllegalStateException.class})
public User createUser(UserRegistrationForm registrationForm) throws UserAlreadyExistsException {
if (userRepository.existsUserByEmailOrUsername(registrationForm.getEmail(), registrationForm.getUsername()))
throw new UserAlreadyExistsException("User with credentials " +
registrationForm.getEmail() + "/" + registrationForm.getUsername() + " already exists");
User user = new User(registrationForm.getUsername(), registrationForm.getEmail());
user.setPassword(passwordEncoder.encode(registrationForm.getPassword()));
user.setRoles(getDefaultRoles());
userRepository.save(user);
createProfileRequest(user);
tokenService.createToken(user.getId(), TokenType.ACTIVATION);
log.info("Created user with id: " + user.getId());
return user;
}
private void createProfileRequest(User user) throws RestClientException, IllegalStateException {
ObjectNode profile = new ObjectMapper().createObjectNode();
profile.put("userId", user.getId());
profile.put("visibleName", user.getUsername());
restTemplate.postForLocation("http://profile/api", profile);
}
Какую базу данных вы используете? Можете ли вы предоставить конфигурацию для соответствующего TransactionManager
?
Я использую mysql и не настроил TransactionManager. Я использую весеннюю загрузку для автоконфигурации
Что вы имеете в виду под ошибкой? Какое исключение было выброшено?
он будет откатываться только для RestClientException.class, IllegalStateException.class. какое исключение это бросает.
RestClientException.class — Ошибка обработки данных на сервере, IllegalStateException.class — При отсутствии зарегистрированной службы. Это все возможно.
Я думаю, что ваша проблема связана с видимостью метода createProfileRequest()
здесь. Транзакционная аннотация по умолчанию работает только с общедоступными методами.
Используйте @TransactionSynchronizationManager