AG-Admin整体说明
AG-Admin是基于Spring Cloud实现的前后端分离
的后台管理信息系统,具备用户管理、部门管理、菜单管理等多个模块,支持多业务系统并行开发,可以作为后台管理系统的脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用Eureka、Fegin、Ribbon、Zuul、Hystrix、Security、OAth、Mybatis、Ace-cache等主要框架和中间件,前端采用Layui组件。
模块说明
架构详解
监控
利用Spring Boot Admin 来监控各个独立Service的运行状态;利用Hystrix Dashboard来实时查看接口的运行状态和调用频率等。
负载均衡
将服务保留的rest进行代理和网关控制,除了平常经常使用的node.js、nginx外,Spring Cloud系列的zuul和rebbion,可以帮我们进行正常的网关管控和负载均衡。
服务注册与调用
基于Eureka来实现的服务注册与调用,在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
熔断机智
因为采取了服务的分布,为了避免服务之间的调用“雪蹦”,我采用了Hystrix的作为熔断器,避免了服务之间的“雪蹦”。
项目结构
├─ace-security
│ │
│ ├─ace-admin----------------管理端服务层
│ │
│ ├─ace-gate-----------------网关负载中心
│ │
│ ├─ace-center---------------服务注册中心
│ │
│ ├─ace-monitor--------------监控中心
│ │
│ ├─ace-config---------------配置中心
│ │
│ └─ace-api------------------公共服务接口包
│
AG-Admin启动指南
启动指南
部署须知
- mysql数据库一个,redis数据库一个
- jdk1.8
- IDE插件一个,lombok插件,具体百度即可
运行步骤
- 运行数据库脚本:依次运行数据库:ace-admin/db/init.sql
- 修改配置数据库配置:ace-admin/src/main/resources/application.yml、ace-gate/src/main/resources/application.yml
- 依次运行main类:CenterBootstrap(ace-center)、ConfigServerBootstrap(ace-config)、GateBootstrap(ace-gate)、AdminBootstrap(ace-admin)、UIBootstrap(ace-ui)
- 访问地址: http://localhost:8765/admin/index 账号/密码:admin/admin
运行博客
- 运行数据脚本:ace-blog-admin/db/init.sql
- 除了上述需要运行的main类外,依次运行BlogUIBootstrap、BlogAdminBootstrap
- 前端访问地址:http://localhost:9700/home
- 后端访问地址:http://localhost:8765/admin/index 账号/密码:blog/blog
AG-Admin开发手手册
1. 后端开发流程
举例:用户管理模块开发
服务层
-
mapper构建,直接里用mybatis-generator:generate来生成,具体修改文件
src/main/resources/builder/generatorConfig.xml
-
biz和rest开发,直接继承BaseBiz、BaseController即可
到此完成后端的开发
ui层
- 控制跳转,通过在ace-ui中创建一个controller
- 在templates中创建一个html页面
- controller中编写一个跳转,保证返回值和刚才创建的页面和文件夹层次一致,具体参见用户
- 额外说明,ui主要是通过使用layui来的,所以我们快速地开发。
至此完成前端页面开发
网关拉通
- 创建刚才页面菜单
- 授权用户可以访问菜单
- 退出重登即可
2. 快速开发技巧
后续会做成代码生成器。
后端
- 复制groupType的biz、controller,修改为对应的对象,如下:
@Service
public class UserBiz extends BaseBiz<UserMapper,User> {
}
// 记得修改requestmapping的对象标志,前端会用
@Controller
@RequestMapping("user")
public class UserController extends BaseController<UserBiz,User> {
@RequestMapping(value = "/page",method = RequestMethod.GET)
@ResponseBody
public TableResultResponse<User> page(@RequestParam(defaultValue = "10") int limit, @RequestParam(defaultValue = "1")int offset, String name){
Example example = new Example(User.class);
if(StringUtils.isNotBlank(name)) {
example.createCriteria().andLike("name", "%" + name + "%");
example.createCriteria().andLike("username", "%" + name + "%");
}
int count = baseBiz.selectCountByExample(example);
PageHelper.startPage(offset, limit);
return new TableResultResponse<User>(count,baseBiz.selectByExample(example));
}
}
前端ui
- 复制src/main/resources/static/ag/group/group_type.js,修改其中的对象标志和后端地址
var groupType = {
baseUrl: "/back/groupType",
entity: "groupType",
tableId: "groupTypeTable",
toolbarId: "toolbar",
unique: "id",
order: "asc",
currentItem: {}
};
变为 ==>
var user = {
baseUrl: "/back/user",
entity: "user",
tableId: "userTable",
toolbarId: "toolbar",
unique: "id",
order: "asc",
currentItem: {}
};
- 复制src/main/resources/templates/groupType下所有文件,修改其中的js引用
<script type="text/javascript" src="ag/group/group_type.js"></script>
==>
<script type="text/javascript" src="ag/user/user.js"></script>
- 修改edit.html中的相关提交属性和js代码中,add、edit对应的表单提交事件
3. 页面授权过程
- 创建访问页面菜单和权限资源
- 分配人员并授权上述创建的菜单和资源