因为系统的菜单是固定的,所以没有必要每次查询数据库,新增全局静态类GlobalVar ,用于存储菜单信息
package com.dc.base.contants;
import com.dc.pojo.SysMenu;
import java.util.Map;
/**
* @author Enzo
* @Description 静态变量类
* @date 2018-11-14 13:59
*/
public class GlobalVar {
public static List<SysMenu>listMenu;
public static Map<String, SysMenu> mapCodeMenu;//aop权限判断快速根据code获得对应的权限信息
}
在【SysMenuService.java】中添加从缓存中获得菜单信息方法,和查询菜单信息方法
若缓存中已存在菜单信息,则返回缓缓中的菜单信息,如不存在,则从数据库中查询菜单信息,并保存在内存中
List<SysMenu> getCacheMenu() throws Exception;
List<SysMenu> selectAllMenu() throws Exception;
在【SysMenuServiceImpl.java】添加查询缓存菜单信息方法和查询菜单信息方法实现
若缓存中已存在菜单信息,则返回缓缓中的菜单信息,如不存在,则从数据库中查询菜单信息,并保存在内存中
/**
* @return java.util.List<com.dc.pojo.SysMenu>
* @title:<h3>获得内存中的菜单信息 <h3>
* @author: Enzo
* @date: 2018-11-14 13:58
* @params []
**/
public List<SysMenu> getCacheMenu() throws Exception {
if (GlobalVar.mapCodeMenu == null) {
selectAllMenu();
}
return GlobalVar.listMenu;
}
/**
* @return void
* @title:<h3> 查询全部菜单信息 <h3>
* @author: Enzo
* @date: 2018-11-14 14:22
* @params [baseModel]
**/
public List<SysMenu> selectAllMenu() throws Exception {
GlobalVar.listMenu = menuDao.selectAllMenu();
GlobalVar.mapCodeMenu = new HashMap<String, SysMenu>();
for (SysMenu menu : GlobalVar.listMenu) {
GlobalVar.mapCodeMenu.put(menu.getCode(), menu);
}
return GlobalVar.listMenu;
}
在【LoginController.java】中添加查询菜单信息控制层接口,以便于解决修改菜单后数据未同步问题(该问题也可通过重启服务器解决)
/**
* @return com.dc.base.pojo.BaseModel
* @title:<h3> 刷新权限菜单 <h3>
* @author: Enzo
* @date: 2018-11-14 14:23
* @params [baseModel]
**/
@ApiOperation(value = "刷新权限菜单", httpMethod = "GET")
@RequestMapping("refreshSysMenu")
public BaseModel refreshSysMenu(BaseModel baseModel) throws Exception {
baseModel.setData(menuService.selectAllMenu());
baseModel.setMessage("刷新权限菜单成功");
return baseModel;
}