许鹏程
2024-01-15 1be3406d2c07ec7c1376044f77a3bbd2576bf256
commit
已修改2个文件
127 ■■■■ 文件已修改
product-server-data-center/src/main/java/com/product/data/center/service/CommonService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-data-center/src/main/java/com/product/data/center/utils/CustomLock.java 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
product-server-data-center/src/main/java/com/product/data/center/service/CommonService.java
@@ -48,6 +48,11 @@
    @Value("${data.system.name}")
    private String dataSystemName;
    public void deleteCenterLog() {
        this.getBaseDao().executeUpdate("DELETE FROM product_sys_data_center_log WHERE uuid in (select * from product_sys_data_center_log_del_v) limit 10000");
    }
    /**
     * 创建定时任务
     *
product-server-data-center/src/main/java/com/product/data/center/utils/CustomLock.java
@@ -6,7 +6,9 @@
import com.product.core.spring.context.SpringMVCContextHolder;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @Author cheng
@@ -16,87 +18,87 @@
public class CustomLock {
    private Set<String> obj = new ConcurrentHashSet<>();
    private Map<String, Long> obj = new ConcurrentHashMap<>();
    private long detectionWaitTime = 1000L;
    private long detectionWaitTime = 1000L;
    /**
     * 无参构造时
     */
    public CustomLock() {
    }
    /**
     * 无参构造时
     */
    public CustomLock() {
    }
    /**
     * @param detectionWaitTime 检测等待时间,单位毫秒
     */
    public CustomLock(long detectionWaitTime) {
        this.detectionWaitTime = detectionWaitTime;
    }
    /**
     * @param detectionWaitTime 检测等待时间,单位毫秒
     */
    public CustomLock(long detectionWaitTime) {
        this.detectionWaitTime = detectionWaitTime;
    }
    public boolean tryLock(String[] key) {
        return this.tryLock(ArrayUtil.join(key, ","));
    }
    public boolean tryLock(String[] key) {
        return this.tryLock(ArrayUtil.join(key, ","));
    }
    public boolean tryLock(String key) {
        if (!StringUtils.isEmpty(key)) {
            key = key.toUpperCase();
            synchronized (key.intern()) {
                if (!this.obj.contains(key)) {
                    lock(key);
                    return true;
                }
            }
        }
        return false;
    }
    public boolean tryLock(String key) {
        if (!StringUtils.isEmpty(key)) {
            key = key.toUpperCase();
            synchronized (key.intern()) {
                if (!this.obj.containsKey(key)) {
                    lock(key);
                    return true;
                }
            }
        }
        return false;
    }
    public void lock(String... key) {
        this.lock(ArrayUtil.join(key, ","));
    }
    public void lock(String... key) {
        this.lock(ArrayUtil.join(key, ","));
    }
    public void lock(String key) {
        String obj = key;
        if (StringUtils.isEmpty(obj)) {
            return;
        }
        obj = obj.toUpperCase();
    public void lock(String key) {
        String obj = key;
        if (StringUtils.isEmpty(obj)) {
            return;
        }
        obj = obj.toUpperCase();
//        boolean enterLock = false;
        long starTime = System.currentTimeMillis();
        Long outLogTime = null;
        while (this.obj.contains(obj)) {
            if (System.currentTimeMillis() - starTime >= (1000 * 60 * 5)) {
                if (outLogTime == null || System.currentTimeMillis() - outLogTime >= (1000 * 60)) {
                    outLogTime = System.currentTimeMillis();
                    SpringMVCContextHolder.getSystemLogger().error("等待释放锁时间超过5分钟,等待时间:" + (System.currentTimeMillis() - starTime) + "ms,lockKey:" + obj);
                }
            }
        long starTime = System.currentTimeMillis();
        Long outLogTime = null;
        while (this.obj.containsKey(obj)) {
            if (System.currentTimeMillis() - starTime >= (1000 * 60 * 5)) {
                if (outLogTime == null || System.currentTimeMillis() - outLogTime >= (1000 * 60)) {
                    outLogTime = System.currentTimeMillis();
                    SpringMVCContextHolder.getSystemLogger().error("等待释放锁时间超过5分钟,等待时间:" + (System.currentTimeMillis() - starTime) + "ms,lockKey:" + obj);
                }
            }
//            enterLock = true;
//            SpringMVCContextHolder.getSystemLogger().info("锁释放等待,lockKey:" + obj);
            ThreadUtil.sleep(this.detectionWaitTime);
        }
            ThreadUtil.sleep(this.detectionWaitTime);
        }
//        if (enterLock) {
//            SpringMVCContextHolder.getSystemLogger().info("等待定时间:" + (System.currentTimeMillis() - starTime) + " ms,lockKey:" + obj);
//        }
//        SpringMVCContextHolder.getSystemLogger().info("上锁成功,lockKey:" + obj);
        this.obj.add(obj);
    }
        this.obj.put(obj, System.currentTimeMillis());
    }
    public void unLock(String... key) {
        String obj = ArrayUtil.join(key, ",");
        unLock(obj);
    }
    public void unLock(String... key) {
        String obj = ArrayUtil.join(key, ",");
        unLock(obj);
    }
    public void unLock(String key) {
    public void unLock(String key) {
        if (StringUtils.isEmpty(key)) {
            return;
        }
        this.obj.remove(key.toUpperCase());
        if (StringUtils.isEmpty(key)) {
            return;
        }
        this.obj.remove(key.toUpperCase());
//        SpringMVCContextHolder.getSystemLogger().info("释放锁成功,lockKey:" + key);
    }
    }
}