RedisLockController.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.ruoyi.demo.controller;
  2. import com.baomidou.lock.LockInfo;
  3. import com.baomidou.lock.LockTemplate;
  4. import com.baomidou.lock.annotation.Lock4j;
  5. import com.baomidou.lock.executor.RedissonLockExecutor;
  6. import com.ruoyi.common.core.domain.R;
  7. import io.swagger.v3.oas.annotations.tags.Tag;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import java.time.LocalTime;
  14. /**
  15. * 测试分布式锁的样例
  16. *
  17. * @author shenxinquan
  18. */
  19. @Slf4j
  20. @RestController
  21. @RequestMapping("/demo/redisLock")
  22. public class RedisLockController {
  23. @Autowired
  24. private LockTemplate lockTemplate;
  25. /**
  26. * 测试lock4j 注解
  27. */
  28. @Lock4j(keys = {"#key"})
  29. @GetMapping("/testLock4j")
  30. public R<String> testLock4j(String key, String value) {
  31. System.out.println("start:" + key + ",time:" + LocalTime.now().toString());
  32. try {
  33. Thread.sleep(10000);
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. System.out.println("end :" + key + ",time:" + LocalTime.now().toString());
  38. return R.ok("操作成功", value);
  39. }
  40. /**
  41. * 测试lock4j 工具
  42. */
  43. @GetMapping("/testLock4jLockTemplate")
  44. public R<String> testLock4jLockTemplate(String key, String value) {
  45. final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class);
  46. if (null == lockInfo) {
  47. throw new RuntimeException("业务处理中,请稍后再试");
  48. }
  49. // 获取锁成功,处理业务
  50. try {
  51. try {
  52. Thread.sleep(8000);
  53. } catch (InterruptedException e) {
  54. //
  55. }
  56. System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName());
  57. } finally {
  58. //释放锁
  59. lockTemplate.releaseLock(lockInfo);
  60. }
  61. //结束
  62. return R.ok("操作成功", value);
  63. }
  64. }