spring-boot-2-api framework and integrated a lot of third-party sdk features
spring-boot-2-api 可用于后端单应用及多应用的 API 接口开发框架,它基于 SpringBoot2 + MyBatis3 + Spring Security5 + JWT 实现。它使用了最新的后台技术栈,相信不管你的需求是什么,本项目都能帮助到你。
严格按照 阿里编码规约 的编码规范
├── edu-common -- 工具类及通用代码
├── edu-db -- 数据库操作代码(可使用MybatisCodeHelperPro)
├── edu-security -- SpringSecurity封装的公用模块
├── edu-api-portal -- 前台系统接口
└── edu-api-admin -- 后台系统接口
├── src-xxx
│ │ java
│ │ │ anno 注解
│ │ │ config 配置
│ │ │ data 数据封装
│ │ │ ├── BaseDefine 常量定义类
│ │ │ ├── EC 错误码/错误信息类
│ │ │ ├── PageIn 分页传入参数
│ │ │ ├── pageInfo 分页返回数据
│ │ │ ├── ReturnInfo 返回数据
│ │ │ entity Bean类与枚举类
│ │ │ exception 异常
│ │ │ ├── ErrController /error 异常处理
│ │ │ ├── ExceptionHandle Exception 处理
│ │ │ ├── MyException 自定义异常类
│ │ │ middleware
│ │ │ | aop 代理(jsonp、log、速率限制等)
│ │ │ | filter 过滤(跨域)
│ │ │ | Interceptor 拦截(请求拦截、数据脱敏等)
│ │ │ third 第三方API库(OSS、短信、邮件等)
│ │ │ tools 工具集
│ │ resource
| | | ip2region ip地址库
│ │ ├── log4j2-spring.xml 日志配置文件
│ │ ├── mybatis-config.xml mybatis通用配置文件
└── pom.xml maven 依赖库
├── src-xxx
│ │ java
│ │ │ mapper db操作
│ │ │ model ORM对象
│ │ resource
│ │ │ mapper mapper xml
└── pom.xml maven 依赖库
├── src-xxx
│ │ java
│ │ │ bean
│ │ │ │ dto 传入对象Bean
│ │ │ │ vo 返回对象Bean
│ │ │ common
│ │ │ │ conf application.yml配置的Bean映射
│ │ │ │ data 数据定义
│ │ │ │ middleware 拦截器等
│ │ │ │ service 第三方服务
│ │ │ config 配置目录(如Redis、Mybatis等)
│ │ │ controller 控制基类
│ │ │ service 逻辑层
│ │ │ │ impl 接口实现
│ │ │ │ base 基础逻辑
│ │ resource 资源目录
│ │ │ static 静态文件
│ │ │ templates view 模板
│ │ ├── application.yml 配置文件
│ │ ├── application-dev.yml 开发配置文件
│ │ ├── application-pro.yml 线上配置文件
└── pom.xml maven 依赖库
- 使用
EC
组织错误码和错误信息 - 非 Controller 层采用抛异常提前结束请求
- 操作异常等,会通过
ExceptionHandle
拦截并给出友好的提示
服务层是 API 调用的入口,统一处理 API 应用接入授权、参数校验等
- 使用注解验证请求参数
- 调用业务逻辑层,
ReturnInfo
方法返回数据 - 一个函数就是一个独立的 API 接口
- 服务层之间不可相互调用
- 一个函数完成一个独立的业务逻辑处理
- 内部相关资源权限的授权检测
- 调用模型层,完成业务的逻辑处理
- 不直接参与数据库的直接操作
- 独立的业务逻辑层之间不可相互调用
- 通过全局的抛异常返回错误信息
- 调用数据库,完成数据的读写操作
- 单条信息有查询缓存,并且在更新、删除操作时同步缓存信息
- 不进行权限的授权检测(统一由业务逻辑层处理)
- 数据库操作的事务处理交由业务逻辑层处理
- 无法通过返回值处理的可直接抛出异常,不可捕获异常
- 独立的模型层之间不可相互调用
更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新
需要安装 MySQL、Redis,并导入 doc/sql/ 目录下的 SQL 文件到 MySQL 数据库
mvnw clean package -Dmaven.test.skip=true
也可直接基于 IDEA 的调试模式运行
控制台运行 jar 包
java -jar edu-api-portal/target/edu-api-portal-x.x.x.jar --server.port=8001
java -jar edu-api-admin/target/edu-api-admin-x.x.x.jar --server.port=8002
只要控制台关闭,服务就不能访问了
后台运行 jar 包:
nohup java -jar xxx.jar &
启动的时候选择读取不同的配置文件
java -jar xxx.jar --spring.profiles.active=dev
启动的时候设置 jvm 参数
java -Xms10m -Xmx80m -jar xxx.jar &
使用 Postman 工具测试接口
portal 应用程序
192.168.123.100:8001/portal/common/pwd/login
采用 POST
请求,传入 JSON 格式的 user_name: admin
与 pwd: 123456a
admin 应用程序
192.168.123.100:8002/admin/monitor/log/login
采用 GET
请求,在 Header 中传入 Authorization
认证授权参数 Edu eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE2NDA2NTUxNTY1MTEsImV4cCI6MTY0MTI1OTk1Nn0.Vh0sV3AnXUywqW7pw3zArL-xO720HE2oIg-vsaI12roGIpVHrS4H6WJQ2tBnUQHdo6I0INihhBuzKPY9gano1g
由上述返回的 token 与 token_head 拼接而成
需要修改 edu-api-portal/pom.xml 与 edu-api-admin/pom.xml 文件。安装时,可以参考 doc/docker/volume/ 目录下的文件
cd edu-admin
..\mvnw dockerfile:build
..\mvnw dockerfile:push
cd edu-portal
..\mvnw dockerfile:build
..\mvnw dockerfile:push
注意
基于 windows 推送 docker 镜像,需要安装 docker desktop