Мне нужно выяснить, нужно ли аннотировать метод в классе 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 произойдет многократная запись в БД ... Не уверен, пожалуйста, исправьте меня.