diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index 1c7cb3438..293bbe7e5 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -33,8 +33,6 @@ import org.springframework.stereotype.Service; import java.time.Duration; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.function.Supplier; /** @@ -151,22 +149,17 @@ public class SysLoginService { loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY)); loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY)); } - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { - executor.execute(() -> { - loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); - }); - executor.execute(() -> { - loginUser.setRolePermission(permissionService.getRolePermission(userId)); - }); - executor.execute(() -> { - List roles = roleService.selectRolesByUserId(userId); - loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); - }); - executor.execute(() -> { - List posts = postService.selectPostsByUserId(userId); - loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class)); - }); - } + ThreadUtils.virtualSubmit(() -> { + loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); + }, () -> { + loginUser.setRolePermission(permissionService.getRolePermission(userId)); + }, () -> { + List roles = roleService.selectRolesByUserId(userId); + loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); + }, () -> { + List posts = postService.selectPostsByUserId(userId); + loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class)); + }); return loginUser; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java new file mode 100644 index 000000000..fd382918b --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ThreadUtils.java @@ -0,0 +1,36 @@ +package org.dromara.common.core.utils; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +/** + * 线程工具 + * + * @author Lion Li + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ThreadUtils { + + /** + * 批量执行任务 + */ + public static void virtualSubmit(Runnable ...runnableList) { + List> callableList = new ArrayList<>(); + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { + for (Runnable runnable : runnableList) { + callableList.add(executor.submit(runnable)); + } + for (Future future : callableList) { + future.get(); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + + } + +}