Spring Data Mongodb @Transactional(从不传播)

时间:2019-05-20 12:07:45

标签: java spring spring-data-mongodb spring-transactions

我需要弄清楚是否需要在类 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代理。无需检查此代码是否在事务中运行,因此可能会在单个Spring事务中发生多个数据库写操作...不确定,请纠正我。

0 个答案:

没有答案