sxq
2021-06-22 645c926bbd52baa90c0a4af0d253047709c5e02c
集成lock4j框架,删除redisson锁,使用lock4j的锁。
已修改5个文件
已删除2个文件
274 ■■■■ 文件已修改
pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RedisLock.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/service/ITestDemoService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -30,6 +30,7 @@
        <feign-okhttp.version>11.0</feign-okhttp.version>
        <spring-boot-admin.version>2.4.1</spring-boot-admin.version>
        <redisson.version>3.15.2</redisson.version>
        <lock4j.version>2.2.1</lock4j.version>
        <datasource.version>3.4.0</datasource.version>
    </properties>
@@ -133,7 +134,11 @@
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
                <version>${lock4j.version}</version>
            </dependency>
            <!-- å®šæ—¶ä»»åŠ¡-->
            <dependency>
                <groupId>com.ruoyi</groupId>
ruoyi-common/pom.xml
@@ -152,6 +152,11 @@
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>lock4j-redisson-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RedisLock.java
ÎļþÒÑɾ³ý
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
@@ -1,16 +1,14 @@
package com.ruoyi.demo.controller;
import com.ruoyi.common.annotation.RedisLock;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisLockManager;
import com.ruoyi.demo.service.ITestDemoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
/**
@@ -24,45 +22,27 @@
public class RedisLockController {
    @Autowired
    private RedisLockManager redisLockManager;
    private ITestDemoService testDemoService;
    /**
     * #p0 æ ‡è¯†å–第一个参数为redis锁的key
     * æµ‹è¯•lock4j
     * @param key
     * @param value
     * @return
     */
    @GetMapping("/testLock1")
    @RedisLock(expireTime = 10, key = "#p0")
    public AjaxResult<String> testLock1(String key, String value) {
        try {
            // åŒæ—¶è¯·æ±‚排队
//            Thread.sleep(5000);
            // é”è¶…时测试
            Thread.sleep(11000);
        } catch (InterruptedException e) {
            e.printStackTrace();
    @GetMapping("/testLock4j")
    public  AjaxResult<String> testLock4j(String key,String value){
        testDemoService.testLock4j(key);
        return AjaxResult.success("操作成功",value);
        }
    @GetMapping("/testLock4jLockTemaplate")
    public  AjaxResult<String> testLock4jLockTemaplate(String key,String value){
        testDemoService.testLock4jLockTemaplate(key);
        return AjaxResult.success("操作成功",value);
    }
    /**
     * æµ‹è¯•锁工具类
     */
    @GetMapping("/testLock2")
    public AjaxResult<Void> testLock(String key, Long time) {
        try {
            boolean flag = redisLockManager.getLock(key, time, TimeUnit.SECONDS);
            if (flag) {
                log.info("获取锁成功: " + key);
                Thread.sleep(3000);
                redisLockManager.unLock(key);
                log.info("释放锁成功: " + key);
            } else {
                log.error("获取锁失败: " + key);
            }
        } catch (InterruptedException e) {
            log.error(e.getMessage());
        }
        return AjaxResult.success();
    }
    /**
     * æµ‹è¯•spring-cache注解
ruoyi-demo/src/main/java/com/ruoyi/demo/service/ITestDemoService.java
@@ -18,6 +18,11 @@
 * @date 2021-05-30
 */
public interface ITestDemoService extends IServicePlus<TestDemo> {
    void testLock4j(String key);
    void testLock4jLockTemaplate(String key);
    /**
     * æŸ¥è¯¢å•个
     * @return
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestDemoServiceImpl.java
@@ -2,6 +2,10 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.LockInfo;
import com.baomidou.lock.LockTemplate;
import com.baomidou.lock.annotation.Lock4j;
import com.baomidou.lock.executor.RedissonLockExecutor;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.DataScope;
@@ -18,8 +22,10 @@
import com.ruoyi.demo.mapper.TestDemoMapper;
import com.ruoyi.demo.service.ITestDemoService;
import com.ruoyi.demo.vo.TestDemoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalTime;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -33,6 +39,43 @@
@Service
public class TestDemoServiceImpl extends ServicePlusImpl<TestDemoMapper, TestDemo> implements ITestDemoService {
    @Autowired
    private LockTemplate lockTemplate;
    @Override
    public void testLock4jLockTemaplate(String key) {
        final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class);
        if (null == lockInfo) {
            throw new RuntimeException("业务处理中,请稍后再试");
        }
        // èŽ·å–é”æˆåŠŸï¼Œå¤„ç†ä¸šåŠ¡
        try {
            try {
                Thread.sleep(8000);
            } catch (InterruptedException e) {
                //
            }
         System.out.println("执行简单方法1 , å½“前线程:" + Thread.currentThread().getName());
        } finally {
            //释放锁
            lockTemplate.releaseLock(lockInfo);
        }
        //结束
    }
    @Override
    @Lock4j(executor = RedissonLockExecutor.class,keys = {"#key"})
    public void testLock4j(String key) {
        System.out.println("start:"+key+",time:"+LocalTime.now().toString());
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end :"+key+",time:"+LocalTime.now().toString());
    }
    @Override
    public TestDemoVo queryById(Long id) {
        return getVoById(id, TestDemoVo.class);
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RedisLockAspect.java
ÎļþÒÑɾ³ý