代码之家  ›  专栏  ›  技术社区  ›  Harshana

实例道与Singelton Bean在春季的交互作用

  •  1
  • Harshana  · 技术社区  · 6 年前

    假设我有一个名为Assignment的DAO,它用带有mongo集合名Assignment的@Document map声明。

    @Service
    public class AssignmentImpl{    
    public Assignment updateAssignment(Assignment assignment){
        Assignment assignmentExsisting  = assignmentRepo.getAssignment(assignment.getId());
        BeanUtils.copyProperties(assignment,assignmentExsisting);
        assignmentRepo.save(assignmentExsisting);    
    }    
    }
    

    假设多个线程(用户)对不同的分配执行更新操作。

    在这种情况下,用户A可能在执行更新操作之前获得分配id 123,而当用户B开始执行更新操作时,AssignmentImpl将把分配引用更改为不同的分配id 456。在这种情况下,用户A将更新一个完全不同的分配。有可能吗?如果是的话,我们怎样才能预防呢?使更新操作同步还是有其他好的解决方案?

    1 回复  |  直到 6 年前
        1
  •  1
  •   akash    6 年前

    不,这不是您的想法,请注意,即使服务类是singleton,每个要更新的调用都不会与任何其他方法调用的执行重叠,因为这两个调用都将在服务器创建的不同线程中执行。因此,操作将按照给定的赋值进行,两个用户的结果不会互换, 为什么?

    例如,两辆公共汽车从A点出发到B点。现在,没有一辆公共汽车有共同的乘客(这不可能吧?),两辆车都有自己的乘客和燃料,但两辆车的机制(存储库和服务)保持不变。