From 7cef6f8bf289f89e4e9dd2e52046085266c05727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E9=87=91=E8=80=80?= <94180588@qq.com> Date: Tue, 14 Jun 2022 07:24:56 +0000 Subject: [PATCH 1/4] =?UTF-8?q?!30=20=E8=A7=A3=E5=86=B3=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=89=8D=E6=AE=B5=E4=BB=A3=E7=A0=81=E5=AD=97=E5=85=B8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=8D=E5=A4=8Dbug=20*=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=89=8D=E6=AE=B5=E4=BB=A3=E7=A0=81=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E6=95=B0=E6=8D=AE=E9=87=8D=E5=A4=8Dbug=EF=BC=9A?= =?UTF-8?q?=E4=BD=86=E4=B8=80=E4=B8=AA=E9=A1=B5=E9=9D=A2=E4=B8=AD=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=AD=97=E5=85=B8=E6=97=B6=EF=BC=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/me/zhengjie/utils/GenUtil.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java index b1cb249e..d197a3ca 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java +++ b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java @@ -1,4 +1,4 @@ -/* +/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -276,7 +276,8 @@ public class GenUtil { // 主键存在字典 if (StringUtils.isNotBlank(column.getDictName())) { genMap.put("hasDict", true); - dicts.add(column.getDictName()); + if(!dicts.contains(column.getDictName())) + dicts.add(column.getDictName()); } // 存储字段类型 From 20f2c6362ee12d4a44356922aff8945f6d8c7c32 Mon Sep 17 00:00:00 2001 From: Zheng Jie <201507802@qq.com> Date: Tue, 14 Jun 2022 16:32:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E5=AE=8C=E5=96=84](mast?= =?UTF-8?q?er):=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/MonitorServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java index 6e7e5222..fd69a222 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java @@ -148,9 +148,15 @@ public class MonitorServiceImpl implements MonitorService { cpuInfo.put("logic", processor.getLogicalProcessorCount() + "个逻辑CPU"); // CPU信息 long[] prevTicks = processor.getSystemCpuLoadTicks(); - // 等待1秒... - Util.sleep(1000); + // 默认等待300毫秒... + long time = 300; + Util.sleep(time); long[] ticks = processor.getSystemCpuLoadTicks(); + while (Arrays.toString(prevTicks).equals(Arrays.toString(ticks)) && time < 1000){ + time += 25; + Util.sleep(25); + ticks = processor.getSystemCpuLoadTicks(); + } long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()]; long sys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()]; From 64a3ff7b26b15470f5473d04dcd0c7bbb23b6e39 Mon Sep 17 00:00:00 2001 From: xiaoyong <56395147+xiaoyonghaoe@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:25:49 +0800 Subject: [PATCH 3/4] Issues635 (#751) * issues/635 * issues/635 Co-authored-by: asdc --- .../zhengjie/modules/system/service/impl/DataServiceImpl.java | 2 +- .../zhengjie/modules/system/service/impl/UserServiceImpl.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java index 33a81480..2933db9c 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java @@ -43,7 +43,7 @@ public class DataServiceImpl implements DataService { private final DeptService deptService; /** - * 用户角色改变时需清理缓存 + * 用户角色和用户部门改变时需清理缓存 * @param user / * @return / */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 6342d130..867509d3 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -119,6 +119,10 @@ public class UserServiceImpl implements UserService { redisUtils.del(CacheKey.MENU_USER + resources.getId()); redisUtils.del(CacheKey.ROLE_AUTH + resources.getId()); } + // 修改部门会影响 数据权限 + if (!Objects.equals(resources.getDept(),user.getDept())) { + redisUtils.del(CacheKey.DATA_USER + resources.getId()); + } // 如果用户被禁用,则清除用户登录信息 if(!resources.getEnabled()){ onlineUserService.kickOutForUsername(resources.getUsername()); From 255a3254ce9eaefc4ac67816ebfc020d5c93bff0 Mon Sep 17 00:00:00 2001 From: Zheng Jie <201507802@qq.com> Date: Mon, 4 Jul 2022 11:44:54 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E5=AE=8C=E5=96=84](mast?= =?UTF-8?q?er):=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=20close=20https://g?= =?UTF-8?q?ithub.com/elunez/eladmin/issues/752?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/me/zhengjie/utils/GenUtil.java | 2 +- .../config/thread/AsyncTaskExecutePool.java | 4 ++-- .../zhengjie/config/thread/TheadFactoryName.java | 15 ++++++++------- .../config/thread/ThreadPoolExecutorUtil.java | 11 +++++++++-- .../modules/quartz/utils/ExecutionJob.java | 9 ++++----- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java index d197a3ca..b62efa2d 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java +++ b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java @@ -1,4 +1,4 @@ -/* +/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/eladmin-system/src/main/java/me/zhengjie/config/thread/AsyncTaskExecutePool.java b/eladmin-system/src/main/java/me/zhengjie/config/thread/AsyncTaskExecutePool.java index 133cf55f..dc9d1bc3 100644 --- a/eladmin-system/src/main/java/me/zhengjie/config/thread/AsyncTaskExecutePool.java +++ b/eladmin-system/src/main/java/me/zhengjie/config/thread/AsyncTaskExecutePool.java @@ -43,8 +43,8 @@ public class AsyncTaskExecutePool implements AsyncConfigurer { executor.setQueueCapacity(AsyncTaskProperties.queueCapacity); //活跃时间 executor.setKeepAliveSeconds(AsyncTaskProperties.keepAliveSeconds); - //线程名字前缀 - executor.setThreadNamePrefix("el-async-"); + //线程工厂 + executor.setThreadFactory(new TheadFactoryName("el-async")); // setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务 // CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); diff --git a/eladmin-system/src/main/java/me/zhengjie/config/thread/TheadFactoryName.java b/eladmin-system/src/main/java/me/zhengjie/config/thread/TheadFactoryName.java index 4cc8ae91..be227fd5 100644 --- a/eladmin-system/src/main/java/me/zhengjie/config/thread/TheadFactoryName.java +++ b/eladmin-system/src/main/java/me/zhengjie/config/thread/TheadFactoryName.java @@ -15,8 +15,8 @@ */ package me.zhengjie.config.thread; +import me.zhengjie.utils.StringUtils; import org.springframework.stereotype.Component; - import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; @@ -33,24 +33,25 @@ public class TheadFactoryName implements ThreadFactory { private final AtomicInteger threadNumber = new AtomicInteger(1); private final String namePrefix; + private final static String DEF_NAME = "el-pool-"; + public TheadFactoryName() { - this("el-pool"); + this(DEF_NAME); } - private TheadFactoryName(String name){ + public TheadFactoryName(String name){ SecurityManager s = System.getSecurityManager(); group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); //此时namePrefix就是 name + 第几个用这个工厂创建线程池的 - this.namePrefix = name + - POOL_NUMBER.getAndIncrement(); + this.namePrefix = (StringUtils.isNotBlank(name) ? name : DEF_NAME) + "-" + POOL_NUMBER.getAndIncrement(); } @Override public Thread newThread(Runnable r) { - //此时线程的名字 就是 namePrefix + -thread- + 这个线程池中第几个执行的线程 + //此时线程的名字 就是 namePrefix + -exec- + 这个线程池中第几个执行的线程 Thread t = new Thread(group, r, - namePrefix + "-thread-"+threadNumber.getAndIncrement(), + namePrefix + "-exec-"+threadNumber.getAndIncrement(), 0); if (t.isDaemon()) { t.setDaemon(false); diff --git a/eladmin-system/src/main/java/me/zhengjie/config/thread/ThreadPoolExecutorUtil.java b/eladmin-system/src/main/java/me/zhengjie/config/thread/ThreadPoolExecutorUtil.java index 8e04aa2b..dc93fe51 100644 --- a/eladmin-system/src/main/java/me/zhengjie/config/thread/ThreadPoolExecutorUtil.java +++ b/eladmin-system/src/main/java/me/zhengjie/config/thread/ThreadPoolExecutorUtil.java @@ -16,6 +16,7 @@ package me.zhengjie.config.thread; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -26,14 +27,20 @@ import java.util.concurrent.TimeUnit; */ public class ThreadPoolExecutorUtil { - public static ThreadPoolExecutor getPoll(){ + public static ExecutorService getPoll(){ + return getPoll(null); + } + + public static ExecutorService getPoll(String threadName){ return new ThreadPoolExecutor( AsyncTaskProperties.corePoolSize, AsyncTaskProperties.maxPoolSize, AsyncTaskProperties.keepAliveSeconds, TimeUnit.SECONDS, new ArrayBlockingQueue<>(AsyncTaskProperties.queueCapacity), - new TheadFactoryName() + new TheadFactoryName(threadName), + // 队列与线程池中线程都满了时使用调用者所在的线程来执行 + new ThreadPoolExecutor.CallerRunsPolicy() ); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java index 0b352079..5d298ced 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java @@ -19,6 +19,7 @@ import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateUtil; +import me.zhengjie.config.thread.ThreadPoolExecutorUtil; import me.zhengjie.domain.vo.EmailVo; import me.zhengjie.modules.quartz.domain.QuartzJob; import me.zhengjie.modules.quartz.domain.QuartzLog; @@ -32,7 +33,6 @@ import me.zhengjie.utils.ThrowableUtil; import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.quartz.QuartzJobBean; import java.util.*; import java.util.concurrent.*; @@ -42,15 +42,15 @@ import java.util.concurrent.*; * @author / * @date 2019-01-07 */ -@Async public class ExecutionJob extends QuartzJobBean { private final Logger logger = LoggerFactory.getLogger(this.getClass()); + // 此处仅供参考,可根据任务执行情况自定义线程池参数 + private final static ExecutorService executor = ThreadPoolExecutorUtil.getPoll("el-quartz-job"); + @Override public void executeInternal(JobExecutionContext context) { - // 创建单个线程 - ExecutorService executor = Executors.newSingleThreadExecutor(); // 获取任务 QuartzJob quartzJob = (QuartzJob) context.getMergedJobDataMap().get(QuartzJob.JOB_KEY); // 获取spring bean @@ -112,7 +112,6 @@ public class ExecutionJob extends QuartzJobBean { } } finally { quartzLogRepository.save(log); - executor.shutdown(); } }