Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

基于springboot && springcloud的脚手架,支持服务合并部署与拆分部署、接口加解密签名、日志数据 脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务、国际化语言、接口监控及服务监控等

License

NotificationsYou must be signed in to change notification settings

smart-cloud/smart-cloud

Repository files navigation

buildcodecovlicenseLatest releaseEN docCN doc

一、功能特征

一个基于spring cloud实现的脚手架。所实现功能如下:

示例工程见smart-cloud-examples

二、模块说明

smart-cloud├──smart-api-core -- 接口权限、加解密、签名等注解 && 用户上下文│  ├──smart-api-annotation -- 接口权限、加解密、签名等注解│  └──smart-user-context -- 用户上下文├──smart-code-generate -- 代码生成├──smart-common-pojo -- 公共对象(VO、DTO、BO、DO等)├──smart-common-web -- web模块公共处理├──smart-constants -- 常量模块├──smart-exception -- 异常模块├──smart-mask -- 敏感数据混淆├──smart-test -- test封装│  ├──smart-cloud-starter-test -- test封装│  ├──smart-cloud-starter-test-mock-rabbitmq -- test rabbitmq模块封装│  ├──smart-cloud-starter-test-mock-redis -- test redis模块封装│  └──smart-cloud-test-core -- test 单元测试、集成测试封装├──smart-utility -- 工具类└──smart-could-starter -- 框架封装   ├──smart-cloud-starter-api-version -- 接口多版本控制   ├──smart-cloud-starter-configure -- 框架配置属性封装   ├──smart-cloud-starter-core -- 框架核心(自定义注解、异常封装、请求响应公共参数、业务相关工具类)   ├──smart-cloud-starter-elasticsearch-dynamic-datasource -- elasticsearch动态数据源   ├──smart-cloud-starter-feign -- feign封装(可拆可合、切面处理)   ├──smart-cloud-starter-global-id -- 分布式id生成器   ├──smart-cloud-starter-job -- 定时任务封装   ├──smart-cloud-starter-locale -- 国际化封装   ├──smart-cloud-starter-log4j2 -- 日志封装(log4j2日志打印,支持日志敏感数据脱敏)   ├──smart-cloud-starter-logback -- 日志封装(logback日志打印,支持日志敏感数据脱敏)   ├──smart-cloud-starter-method-log -- 方法切面日志封装   ├──smart-cloud-starter-mock -- mock封装(mock工具类、常用mock策略、请求接口mock拦截器)   ├──smart-cloud-starter-mp-shardingjdbc -- mybatis plus、dynamic-datasource、shardingjdbc封装(支持多数据源、分库分表;mapper工具类)   ├──smart-cloud-starter-mybatis-plus -- mybatis plus、dynamic-datasource封装(支持多数据源;mapper工具类、表隐私字段加解密等)   ├──smart-cloud-starter-rabbitmq -- rabbitmq封装(消费失败,自动放入延迟队列重新消费)   ├──smart-cloud-starter-rate-limit -- 接口限流   ├──smart-cloud-starter-redis -- redis封装、自定义分布式锁注解   ├──smart-cloud-starter-static-discovery -- 支持feign client的服务地址从配置中心动态获取(不通过注册中心)   ├──smart-cloud-starter-web -- web封装(日志切面、异常处理、参数校验)   └──smart-cloud-starter-monitor -- 服务监控,接口监控      ├──smart-cloud-monitor-common -- 监控公共代码      ├──smart-cloud-starter-monitor-api -- 接口异常监控      └──smart-cloud-starter-monitor-admin -- spring boot admin监控(服务状态、gc、线程数、内存、cpu、tomcat等),企业微信发通知

三、技术栈

名称说明
spring boot手脚架
spring cloud gateway服务网关
nacos服务注册、配置中心
spring boot admin服务监控
openfeign声明式服务调用
sleuthlog4j2链路追踪、日志
mybatismybatis plusORM
dynamic-datasource多数据源
sharding jdbc分库分表
redisembedded-redis缓存、集成测试
sentinel限流、熔断降级
rabbitmq消息队列
fastdfs文件存储
xxl-job定时任务
easyexcelexcel导入导出
Hibernator-Validator参数校验
mockitopodam单元测试、数据mock
h2数据库集成测试
embedded-redisredis集成测试
rabbitmq-mockrabbitmq集成测试
embedded-elasticsearchelasticsearch集成测试
freemarker用于代码生成
yapiidea yapi upload plugin接口文档
jasypt-spring-boot配置文件中敏感数据加解密
Lombok简化代码

四、服务合并原理

  • 合并服务只需修改pom.xml,将待合并的服务import进去即可。
  • rpc接口通过自定义注解SmartFeignClient实现。单个服务独自部署时,FeignClient会生效;当服务提供者和服务消费者合并部署时,FeignClient注解会失效,此时rpc接口将通过实现类对象直接调用。具体逻辑见SmartFeignClientCondition

五、相关说明

(一)服务合并遇到的问题

单个服务以jar的形式,通过maven引入合并服务中。在单体服务中,feign接口通过http请求;服务合并后,feign接口通过内部进程的方式通信。

1、bean名称冲突

不同服务合并打一起后,会存在bean名称冲突的问题。通过自定义bean名称生成规则解决。

2、rpc与rpc实现类冲突

自定义条件注解封装FeignClient。使其在单体服务时,rpc走feign;在合体服务时,rpc走内部进程通信。

3、yaml文件的自动加载

自定义注解YamlScan,用来加载配置的yaml文件(支持正则匹配)。通过SPI机制,在spring.factories文件中添加EnvironmentPostProcessor的实现类,通过其方法参数SpringApplication获取启动类的信息,从而获取YamlScan注解配置的yaml文件信息。然后将yaml文件加到ConfigurableEnvironment中。

4、启动类注解冲突

自定义条件注解SmartSpringCloudApplicationCondition,只会让启动类标记的启动注解生效。

5、maven打包异常

合体服务打包时,单体服务依赖的包也打进单体服务jar。通过maven profiles解决

(二)日志数据脱敏

1.从日志侧切入,自定义标签,打印日志时进行脱敏处理;2.自定义jackson的序列化器;打印日志时,采用自定义的序列化器;3.通过反射获取log传入参数的MaskRule注解信息,最终根据注解规则进行字符串的截取与替换。

(三)服务监控

通过springboot admin监控服务状态,通过扩展actuator接口监听服务中接口的异常情况,并用企业微信通知。

  • 当服务离线时,查询gitlab作业记录,如果最近半小时(可配置)没有tag作业运行记录,则法功企业微信通知时,会@指定提醒人。
  • 自定义接口切面,统计简单滑动窗口时间内接口的失败率,springboot admin通过actuator/health查询时,如果某些接口超过失败率阈值,则会返回服务健康状态检查没通过。

1、服务离线通知

2、服务健康检测没通过

3、服务上线

(四)接口mock数据

接口通过切面拦截的方式,通过反射可以获取返回对象的所有信息,然后根据对象的属性类型,可以随机生成数据;对于特定要求的数据,可以制定mock规则,生成指定格式的数据。

(五)测试

1、单元测试

利用单元测试,提高测试覆盖率。

2、集成测试

  • 在集成测试下,关闭nacos,减少依赖。
  • 依赖的服务rpc接口,通过mockito走挡板。
  • redis层使用embedded-redis做集成测试。
  • rabbitmq层使用rabbitmq-mock做集成测试
  • 数据库层使用h2做集成测试(另外两种方案:方案一通过事务回滚还原测试用例对DB的修改;方案二在测试用例执行前删除相关的表)。

3、系统测试

(六)接口文档

1、接口文档由以下步骤自动生成:

通过idea yapi upload plugin插件,上传到yapi server

2、接口文档效果图

概要

详情

七、错误码说明

所属模块codemessage
smart-constants200成功
smart-constants101校验失败
smart-constants102数据不存在
smart-constants103数据已存在
smart-constants400签名错误
smart-constants401无权限访问
smart-constants404请求url错误
smart-constants408请求超时
smart-constants409重复提交
smart-constants412参数不全
smart-constants413属性未配置
smart-constants415请求方式不支持
smart-constants416请求类型不支持
smart-constants417获取锁失败
smart-constants418上传文件大小超过限制
smart-constants419当前会话已失效,请重新登陆
smart-constants420请求入参json解析异常
smart-constants421接口访问太频繁,请稍后再试
smart-constants500服务器异常
smart-constants501获取Request失败
smart-constants502获取Response失败
smart-constants503rpc请求失败
smart-cloud-starter-web2001待校验参数object不能为null
smart-cloud-starter-elasticsearch-dynamic-datasource3001elasticsearch ds key不存在
smart-cloud-starter-elasticsearch-dynamic-datasource3002elasticsearch 数据源未找到
smart-cloud-starter-elasticsearch-dynamic-datasource3003elasticsearch 动态数据源属性未配置

About

基于springboot && springcloud的脚手架,支持服务合并部署与拆分部署、接口加解密签名、日志数据 脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务、国际化语言、接口监控及服务监控等

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp