2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Gitee-Adresse (muss selbst abgeholt werden)AopProxy-Doppelte Übermittlungen: Doppelte Übermittlungen verhindern (gitee.com)
- @RestController
- public class SubmissionController {
-
- @Autowired
- private SubmissionService submissionService;
-
- private static Jedis jedis = new Jedis("localhost",6379);
- private String lock = "lock";
- private String lockValue = "locked";
- private int gqsj = 5;
- private String ok = "OK";
-
- @PostMapping("/submit")
- public void handleSubmitForm(@RequestParam String name, @RequestParam int age) {
- SubmissionService submissionServiceProxy = (SubmissionService) Proxy.newProxyInstance(submissionService.getClass().getClassLoader(), new Class[]{SubmissionService.class}, (proxy, method, args) -> {
- SetParams params = new SetParams();
- params.nx().ex(gqsj);
- String res = jedis.set(lock, lockValue,params);
- if (ok.equals(res)){
- Object invoke = method.invoke(submissionService,name,age);
- System.out.println("提交成功");
- return invoke;
- }else {
- System.out.println("不允许重复提交");
- return null;
- }
- });
-
- submissionServiceProxy.insert(name, age);
-
-
- // 存疑?第一天晚上return null后汇报一个空指针错误,奇怪的是第二天不报错了
- // 希望懂得大佬给小弟支个招
-
- // try{
- // submissionServiceProxy.insert(name, age);
- // }catch (NullPointerException e){
- // System.out.println("禁止重复提交");
- // }
- }
- }
Die Idee besteht darin, einen Proxy zum Ausführen der Methode zu verwenden, die Idee von aop zu verwenden, um sie aufzuteilen, und vor der Ausführung der Methode eine verteilte Sperre hinzuzufügen. Die verteilte Sperre verwendet hier redis.nx und fügt eine Ablaufzeit hinzu Blockaden verhindern. Insgesamt habe ich nur eine einfache Simulation erstellt und der Text ist relativ einfach. Wenn es Fehler oder Mängel gibt, korrigieren Sie mich bitte und lassen Sie uns gemeinsam Fortschritte machen.