Spring Data Mongodb @Transactional (распространение никогда) - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно выяснить, нужно ли аннотировать метод в классе StoreNewDepartmentService - с помощью транзакций.

// with or without? It works fine without transactional annotation.
// @Transactional(propagation = Propagation.NEVER)
public void storeDepartmentWithEmployees(Department department, List<Employee> employees) {
    // transaction-1
    departmentservice.saveAndSendMessageToMb(department);

   // N transactions for employees
   for (Employee employee : employees) {
       employeeService.saveandSendMessageToMb(employee);
   }
} 

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

Причина, по которой я переместил код в третий класс - StoreNewDepartmentService , поскольку он не будет создавать транзакцию, но определит единственный метод, в котором будет выполняться логика хранения отдела со всеми его сотрудниками.

Если я добавлю @Transactional(propagation = Propagation.NEVER) к этому методу, и если этот метод вызывается из другого места кода, который является транзакционным, он завершится ошибкой в ​​соответствии с документацией Spring. https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Propagation.html

Без этой аннотации 1) Spring proxy не будет создан. Не проверять, выполняется ли этот код в транзакции, поэтому может случиться так, что в одной транзакции Spring произойдет многократная запись в БД ... Не уверен, пожалуйста, исправьте меня.

...