update 优化 使用虚拟线程优化查询速度

This commit is contained in:
疯狂的狮子Li
2026-01-22 11:27:58 +08:00
parent 4072b080fe
commit 660757cb71
2 changed files with 19 additions and 7 deletions

View File

@@ -17,7 +17,7 @@
<spring-boot.version>4.0.1</spring-boot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<java.version>21</java.version>
<mybatis.version>3.5.16</mybatis.version>
<springdoc.version>3.0.1</springdoc.version>
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>

View File

@@ -33,6 +33,8 @@ 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;
/**
@@ -144,17 +146,27 @@ public class SysLoginService {
loginUser.setUsername(user.getUserName());
loginUser.setNickname(user.getNickName());
loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(userId));
loginUser.setRolePermission(permissionService.getRolePermission(userId));
if (ObjectUtil.isNotNull(user.getDeptId())) {
Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY));
}
List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
List<SysPostVo> posts = postService.selectPostsByUserId(userId);
loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class));
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.execute(() -> {
loginUser.setMenuPermission(permissionService.getMenuPermission(userId));
});
executor.execute(() -> {
loginUser.setRolePermission(permissionService.getRolePermission(userId));
});
executor.execute(() -> {
List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
});
executor.execute(() -> {
List<SysPostVo> posts = postService.selectPostsByUserId(userId);
loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class));
});
}
return loginUser;
}