Транзакция Spring не откатывается после исключения

Я создаю нового пользователя, и после этого, когда я создаю профиль для пользователя с помощью 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);
    }

Используйте @TransactionSynchronizationManager

Anant Goswami 10.04.2019 19:29

Какую базу данных вы используете? Можете ли вы предоставить конфигурацию для соответствующего TransactionManager?

seb.wired 10.04.2019 19:58

Я использую mysql и не настроил TransactionManager. Я использую весеннюю загрузку для автоконфигурации

Adrian Sowiński 10.04.2019 20:09

Что вы имеете в виду под ошибкой? Какое исключение было выброшено?

C. Weber 11.04.2019 17:59

он будет откатываться только для RestClientException.class, IllegalStateException.class. какое исключение это бросает.

Chamly Idunil 11.04.2019 19:16

RestClientException.class — Ошибка обработки данных на сервере, IllegalStateException.class — При отсутствии зарегистрированной службы. Это все возможно.

Adrian Sowiński 11.04.2019 19:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что ваша проблема связана с видимостью метода createProfileRequest() здесь. Транзакционная аннотация по умолчанию работает только с общедоступными методами.

Другие вопросы по теме