Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为一个用户锁定功能?_Java_Spring_Mongodb - Fatal编程技术网

Java 如何为一个用户锁定功能?

Java 如何为一个用户锁定功能?,java,spring,mongodb,Java,Spring,Mongodb,我有一个Spring应用程序,它允许多个用户帐户在mongodb中对一个文档进行“投票”。这会增加或减少字段值。用户只允许向上投票或向下投票一次(向上投票/向下投票两次应将值恢复到原始状态)。但是,有时同一用户会多次递增/递减字段值。我想实现一个“锁”,这样就不会发生这种情况。我已经看过Java锁,但我不确定使用它是否只会锁定特定用户或每个用户的函数。您需要做的是在模型中定义一个HasVote字段。所以…: public class User { private boolean hasV

我有一个Spring应用程序,它允许多个用户帐户在mongodb中对一个文档进行“投票”。这会增加或减少字段值。用户只允许向上投票或向下投票一次(向上投票/向下投票两次应将值恢复到原始状态)。但是,有时同一用户会多次递增/递减字段值。我想实现一个“锁”,这样就不会发生这种情况。我已经看过Java锁,但我不确定使用它是否只会锁定特定用户或每个用户的函数。

您需要做的是在模型中定义一个HasVote字段。所以…:

public class User {
    private boolean hasVoted = false;
}
当用户投票时,检查hasvated是否为false。如果为false,请注册投票,然后将HasVote更新为true。如果HasVote为真,则忽略该投票


您不一定需要Java功能来实现它,只需稍微调整一下您的逻辑。

很有趣,但是您如何知道他们现有的逻辑,所以建议他们更改它?我曾想过这种方式,但我认为可能会有更优雅的方式,如果有多个文档,该如何工作?实现同样想法的一个更合理的方法是存储一组已经对每个文档的数据投票的用户。@kryger我有一组已经对每个文档的数据投票的用户。但是,如果用户足够快地按下upvote按钮,它就不会在再次调用该函数之前保存用户的投票。第二次,它将看到投票仍然为空,并再次增加投票计数。这个解决办法似乎有效。。在我接受它之前,我只是等着看是否有人有更好的东西。锁用于解决完全不同的问题-阻止对给定资源的并发访问。