我需要弄清楚是否需要在类 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事务中发生多个数据库写操作...不确定,请纠正我。