# spring-cloud-jd
**Repository Path**: JustryDeng/spring-cloud-jd
## Basic Information
- **Project Name**: spring-cloud-jd
- **Description**: 通用spring-cloud架构,欢迎使用
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2022-10-24
- **Last Updated**: 2024-09-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 微服务架构
## README
## 技术栈 &
| 技术栈 | 版本 | since | remove |
| --------------- | ------------------------------------------------------------ | ------------ | ------------ |
| 微服务 & 脚手架 | 

| `2021.0.5.A` | |
| 微服务 & 脚手架 | 

| `2021.0.1.A` | `2021.0.5.A` |
| orm框架 | 
| `2021.0.1.A` | |
| 数据库 |
| `2021.0.1.A` | |
| 权限框架 | 

| `2021.0.1.A` | |
| 对象存储 |
| `2021.0.1.A` | |
| 文档生成器 |
| `2021.0.1.E` | |
| 文档生成器 |
| `2021.0.1.A` | `2021.0.1.E` |
| 分布式定时任务 |
| `2021.0.5.A` | |
| 消息队列 |
| `2021.0.5.A` | |
| arthas |
| `2021.0.5.B` | |
| …… | …… | | |
## Feature
| 序号 | 说明 | since | remove | replace |
| :--: | ------------------------------------------------------------ | ------------ | ------------ | ------- |
| 1 | 网关支持——`gateway` | `2021.0.1.A` | | |
| 2 | 注册中心支持——`nacos`
注:nacos2.2.0 | `2021.0.5.A` | | |
| 3 | 注册中心支持——`nacos`
注:nacos1.4.2 | `2021.0.1.A` | `2021.0.5.A` | NO.2 |
| 4 | 配置中心支持——`nacos`
注:nacos2.2.0 | `2021.0.5.A` | | |
| 5 | 配置中心支持——`nacos`
注:nacos1.4.2 | `2021.0.1.A` | `2021.0.5.A` | NO.4 |
| 6 | 认证授权鉴权(网管不作统一鉴权,各微服务各自鉴权)——`oauth2 + spring-security` | `2021.0.1.A` | | |
| 7 | 跨微服务调用——`feign` | `2021.0.1.A` | | |
| 8 | 入参出参记录支持——`EnableParameterRecorder + RecordParameters + IgnoreRecordParameters` | `2021.0.1.A` | | |
| 9 | 参数校验支持——`JSR303` | `2021.0.1.A` | | |
| 10 | 全局异常处理器——`spring mvc全局异常处理器` | `2021.0.1.A` | | |
| 11 | 分布式锁支持——`redisson` | `2021.0.1.A` | | |
| 12 | po模型自动填充createdBy、createdAt、updatedBy、updatedAt字段——`mybatis-plus` | `2021.0.1.A` | | |
| 13 | 多租户支持——`mybatis-plus自定义多租户like插件` | `2021.0.1.A` | | |
| 14 | 文件存储支持——`spring-file-storage` | `2021.0.1.A` | | |
| 15 | api文档支持——`knife4j` | `2021.0.1.E` | | |
| 16 | api文档支持——`smart-doc` | `2021.0.1.A` | `2021.0.1.E` | NO.15 |
| 17 | 通用功能选择支持——`@EnableJdFeature`
注:在不同微服务中,根据业务场景需要,通过注解`@EnableJdFeature`一键启用相关功能 | `2021.0.5.A` | | |
| 18 | 租户隔离、租户内数据定向分层隔离 | `2021.0.5.B` | | |
## 编码规范
| 序号 | 规范 | 类别 |
| :--: | :----------------------------------------------------------- | :----------: |
| 1 | 所有api应当只支持一类方法(`POST | GET | PUT`等) | Restful接口 |
| | 同微服务下,所有的api应该保证uri的唯一(,不能通过请求方法来区分) | |
| | 增语义api用`POST` | |
| | 删语义api用`DELETE` | |
| | 改语义api用`PUT` | |
| | 查列表语义api用`POST` | |
| | 查详情语义api用
- `GET`:当查询参数只有一个时
- `POST`:当查询参数多于一个时
| |
| 2 | 所有改语义接口的参数,只有id是必传的,其余都非必填 | 改语义接口 |
| | 当修改时,若后端接收到的字段值:
- 为`null`:则不修改该字段(若有特殊需求,需要将值清空,优先选择将其置为`空字符串`,如果实在要置为`null`,需要新开一个api)
- 为`空字符串`:则视字段业务含义而定,不作修改或将改为空字符串 | |
| 3 | 对controller内的api方法,应按照`增、删、改、查、其它`,这样的顺序排序 | 接口排序 |
| 4 | 所有请求入参模型,应基础基类`BaseDTO` | 接口参数 |
| | 所有分页请求入参模型,应基础基类`BasePageDTO` | |
| 5 | 所有redis key的定义,应统一定义在`CachePrefixEnum`中,并与已有的key保持同样的命名规范
如:`AC_USER_TENANT("access-control:%s:tenant", "访问控制-用户所属租户. 占位符为userId")` | reids规范 |
| 6 | common-ds包下的代码,应按照`工具属性 > 所属主体 > 工具子属性`进行归档 | 代码归档 |
| | common-spring包下的代码,应按照`工具属性 > 工具子属性 `进行归档 | |
| 7 | 所有接口、接口方法上应写上注释 | 注释规范 |
| | 子类方法上的注释不用写(因为接口上写了),除非有特别值得说明的东西 | |
| | 内部private级别的方法,若望名知义则可以不写注释 | |
| | 关键逻辑代码行,需要写上说明 | |
| | 涉及到比较多业务处理的代码,需要写上step说明 | |
| 8 | 所有模型的维护都需要维护进`com.ideaaedi.springcloud.jd.commonds.entity`下
- 通用模型,直接放在`com.ideaaedi.springcloud.jd.commonds.entity`下即可
- 隶属于某个微服务的模型,应放在`com.ideaaedi.springcloud.jd.commonds.entity.{微服务}`下,其中:
- po:存放与表完全对应的模型
- vo:存放api入参出餐模型(`vo.req`:存放api入参模型;`vo.resp`:存放api出参模型)
- bo:业务中间模型
- dto:数据传输模型(与第三方系统、中间件等交互时,存放进dto模型,可细存放到`dto.{交互方}.{类型}`下) | entity维护 |
| 9 | 所有state字典值,都需要维护进`POState` | state字典 |
| 10 | 所有substate字典值,都需要维护进`POSubstate` | substate字典 |
| 11 | 如果你有一套自我成熟的编码规范(评判标准是:写得好看),则按照自己的即可;无则按照阿里规范 | 其余规范 |