Вызов транзакционной функции обязательного распространения дважды приводит к получению только 1 транзакции (но 2 транзакции при вызове из другого класса) - PullRequest
2 голосов
/ 27 октября 2019

У меня есть класс обслуживания с методом doSomething () с аннотацией @transactional и с типом распространения «required». Другой нетранзакционный класс, вызывающий doSomething () дважды.

Я предполагаю, что для каждого вызова будет создано 2 транзакции, но оказалось, что для обоих вызовов используется только одна транзакция. Чтобы еще больше сбить меня с толку, я дважды вызывал doSomething (), используя другой нетранзакционный класс @RestController. Но на этот раз оказалось, что для каждого звонка используются разные транзакции.

У меня 2 вопроса.

Какое поведение ожидается (1 или 2 транзакции)

Почемуздесь разница?

NormalClass{
   @Autowired
   Service service;

   service.doSomething();
   // same transaction used
   service.doSomething(); 
}

RestController{
   @Autowired
   Service service;

   service.doSomething();
   // new transaction used
   service.doSomething();
}

Service{
   @Transactional
   doSomething(){};
}

1 Ответ

1 голос
/ 27 октября 2019

Спасибо @JB Nizet, вы правы, что есть абстрактный класс, расширенный NormalClass, который уже получает транзакцию. Я не ожидал, что абстрактный класс сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...