gpt4 book ai didi

Java 防止并发访问 Spring MVC 中的方法

转载 作者:行者123 更新时间:2023-12-02 03:33:25 34 4
gpt4 key购买 nike

我想使用 Spring MVC 在表中添加一些虚拟数据。

这是代码:-

道中

    public int generateData(){
int iData = 80001;
String qry = "SELECT p FROM TestDomain p";
List<TestDomain> runQry = daoHelper.findByQuery(qry);
if(runQry.size()!=0){
TestDomain tdom = runQry.get((runQry.size()-1));
iData = tdom.getNum_data();
iData++;
}


return iData;
}

这会生成一个虚拟值,添加到表中的整数列中。基本上,如果表为空,它会生成 80001,如果不是,则增加现有的最大值。请注意,由于某些要求限制,我无法使该列唯一。从上述函数获取数据后,我只需使用合并函数将其插入表中。

 entityManager.merge(entity);

现在的问题是,当多个用户同时点击生成函数时,他们会被分配相同的数据,当数据由不同的客户端推送到表时,这会导致重复。我如何防止这种重复?

编辑..

1,我已经在我的生成方法上尝试了java同步关键字,但它不起作用,可能是因为我在服务层中使用了spring的事务性。

2,我不能使用数据库序列来生成唯一数据,数据必须来自generate方法。

最佳答案

这不是 Spring MVC 数据重复问题。您的应用程序需要通过控制对生成 id 的方法的并发访问来防止数据重复,(或)首选方法是使用数据库序列来获取下一个 id,而不是应用程序生成 id。

如果您无法使用数据库序列但仍想使用生成方法,那么您的应用程序需要通过添加 JAVA synchronized 关键字来控制并发性来生成方法(和/或)锁定任何对象以允许单线程访问该方法。这将使其他用户/线程等待,直到执行该方法。

关于Java 防止并发访问 Spring MVC 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747525/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com