内容简介:yue-library简介 yue-library是一个基于SpringBoot封装的增强库 丰富的Java工具类库 优越的ORM框架 优雅的业务封装 优化的Spring环境配置 完善的规约限制 配套的代码生成平台 安稳贴切的开源架构方案 版本更新日志...
yue-library简介
yue-library是一个基于SpringBoot封装的增强库
- 丰富的 Java 工具类库
- 优越的ORM框架
- 优雅的业务封装
- 优化的Spring环境配置
- 完善的规约限制
- 配套的代码生成平台
- 安稳贴切的开源架构方案
版本更新日志
- 主要变更:使用SpringBoot2.4新的配置文件机制,提供默认的优化配置实现。
- 主要新特性:使用注解
@ApiIdempotent
可优雅的实现接口幂等性(数据脱敏功能延迟到2.4.1中发布)
新特性
- 【base】新增
@CarDrivingLicence
、@CarVin
、@CreditCode
、@ZipCode
四个校验注解 - 【base】迁移actuator配置至auth模块,添加actuator配置安全
- 【base】actuator端点默认使用32222端口进行访问,与API服务端口进行区分,保持良好的安全忧患意识
- 【base】网络代理,额外不代理地址默认添加所有内网网段
- 【jdbc】完善逻辑删除,delete_time条件追加时判断 sql 中是否存在delete_time否则不再追加
- 【redis】新增API接口幂等性优雅实现,使用
@ApiIdempotent
注解标注接口需要进行幂等性校验 - 【test】新增模块分离测试
- 【docs】新增安全规约
- 【docs】优化异步线程池示例与完善文档
- 【docs】完善逻辑删除文档
- 【docs】添加分布式缓存示例与文档
- 【docs】完善分布式锁与接口幂等性文档
- 【docs】完善POJO与Lombok的使用说明
- 【docs】添加类型转换器Bean别名规范
- 【docs】完善JavaBean参数解析器文档,提示IPO中有无参构造时,解析List<String>类型需传标准是数组字符串
- 【other】删除部分早已标记为失效的方法
Bug修复
Maven仓库实际发布版本号
j8.2.4.0
、j11.2.4.0
依赖 | 版本 |
---|---|
spring-boot | 2.4.3 |
spring-cloud | 2020.0.2 |
spring-cloud-alibaba | 2021.1 |
hutool | 5.6.3 |
fastjson | 1.2.76 |
工程结构
. yue-library
├── yue-library
│ ├── yue-library-dependencies dependencies版本控制
│ ├── yue-library-base 基础核心模块,提供丰富的Java工具类库、接口参数校验、类型转换器等
│ ├── yue-library-base-crypto 加解密模块,提供对称、非对称和摘要算法、密钥交换加解密等
│ ├── yue-library-web WebMvc模块,servlet编程,提供请求与响应参数的包装与解析等
│ ├── yue-library-webflux WebFlux实现,响应式编程(如:SpringCloudGateway)
│ ├── yue-library-data-jdbc ORM框架,基于SpringJdbc,拥有着强大性能的同时又不失简单灵活等
│ ├── yue-library-data-redis Redis客户端,基于SpringRedis,更简单灵活,提供分布式锁等
│ ├── yue-library-auth-service OAuth2认证模块,基于SpringSecurity,更简单灵活,提供全局token与登录等
│ ├── yue-library-auth-client OAuth2客户端模块,提供获取当前登录用户状态信息等
│ └── yue-library-pay 支付模块,基于pay-java-parent,让你真正做到一行代码实现支付聚合
└── yue-library-samples
├── yue-library-test web测试项目,提供详细的特性使用示例、接口单元测试
├── yue-library-test-webflux webflux测试项目,提供详细的特性使用示例、接口单元测试
├── yue-library-template-boot SpringBoot项目模版,提供快速开发示例
└── yue-library-template-cloud SpringCloud项目模版,SOA共享架构(阿里巴巴中台)
快速开始
引入项目依赖
maven项目,在pom.xml文件中添加如下一段代码,并将${version}
替换为对应版本号:
<parent>
<groupId>ai.ylyue</groupId>
<artifactId>yue-library-dependencies</artifactId>
<version>${version}</version>
</parent>
随后引入所需要的模块,如WebMvc项目引入:yue-library-web
依赖说明:yue-library-base
为基础模块,一般情况下不需要单独引入,如:web、data-jdbc、data-redis等模块皆已默认依赖。
<dependencies>
<dependency>
<groupId>ai.ylyue</groupId>
<artifactId>yue-library-web</artifactId>
</dependency>
...
</dependencies>
启动项目
新建一个SpringBoot main
方法启动类:
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(TestApplication.class, args);
}
}
写一个测试接口:
@RestController
@RequestMapping("/quickstart")
public class QuickstartController {
@GetMapping("/get")
public Result<?> get(JSONObject paramJson) {
return ResultInfo.success(paramJson);
}
}
访问接口测试,如:http://localhost:8080/quickstart/get
{
"code": 200,
"msg": "成功",
"flag": true,
"count": null,
"data": {}
}
上述代码完全保持了SpringBoot的风格,但又使用到了yue-library的增强特性,如:
- HTTP消息转换器支持使用Alibaba Fastjson作为参数获取对象
- 请求参数智能解析,无需再为URL query-string、Body from-data、Body application/json传参方式烦恼
- 错误时会对异常进行统一处理,响应RESTful风格的错误提示
- 支持前端跨域请求
当然除了这些已使用到的特性之外,你还可以尝试如:响应时间类型时自动格式化、请求参数校验、API接口版本控制、反复读取Servlet输入流等。 并且在yue-library-samples
目录下,存放着不同架构类型的示例模板,你可以根据自身需求选择,从而快速上手。
接口幂等性
什么是幂等性(引用自OCP项目文档)
HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
简单来说,是指无论调用多少次都不会有不同结果的 HTTP 方法。
什么情况下需要幂等
业务开发中,经常会遇到重复提交的情况,无论是由于网络问题无法收到请求结果而重新发起请求,或是前端的操作抖动而造成重复提交情况。 在交易系统,支付系统这种重复提交造成的问题有尤其明显,比如:
- 用户在APP上连续点击了多次提交订单,后台应该只产生一个订单;
- 向支付宝发起支付请求,由于网络问题或系统BUG重发,支付宝应该只扣一次钱。 很显然,声明幂等的服务认为,外部调用者会存在多次调用的情况,为了防止外部多次调用对系统数据状态的发生多次改变,将服务设计成幂等。
开始使用
实现接口幂等性的方式有很多种,我比较推崇使用分布式锁或version令牌的方式,而上面我们已经介绍了分布式锁的使用,那么下面我们就来介绍下version令牌的实现与如何使用。
实现流程
客户端第一次请求:
- 客户端发起请求获得version令牌
- 服务端生成令牌并将之存入 redis 中,然后将生成的令牌返回给客户端。
客户端第二次请求:
- 客户端将拿到的version令牌携带在,将要请求的业务接口中
- 服务端校验客户端是否携带令牌与令牌是否过期
后端编码
- 开启接口幂等性校验
yue:
redis:
api-idempotent:
enabled: true
- 在需要进行接口幂等性校验的接口加上
@ApiIdempotent
注解
@ApiIdempotent
@PostMapping("/test")
public Result<?> test(JSONObject paramJson) {
return R.success(paramJson);
}
前端调用
- 请求获取version令牌
接口地址:GET /open/v2.3/apiIdempotent/getVersion
正确响应示例:
{
"code": 200,
"msg": "成功",
"flag": true,
"count": null,
"data": "c4ac1fc37f3c44c2bc5f14fdbd0a1b27"
}
- 将获取到的version令牌,携带在需要幂等性验证的接口中请求
- 如果前端未携带
apiIdempotentVersion
参数访问需要进行幂等性校验的接口时,会抛出幂等性错误提示 apiIdempotentVersion
参数推荐放在header中- 一个令牌只能被使用一次
错误请求时的响应示例:
{
"code": 600,
"msg": "请勿重复操作",
"flag": false,
"count": null,
"data": "【幂等性】幂等校验失败,apiIdempotentVersion 参数已失效,当前 value: 9b94ca639d3e49f489583a8719a637ac"
}
注解说明
@ApiIdempotent
接口幂等性注解:
- 被此元素注解的接口,表示需要进行幂等性校验
- 前端请求被此元素注解的接口时,必须携带
apiIdempotentVersion
参数 apiIdempotentVersion
参数值,需要调用getVersion
接口预先获取,获得的值只可被使用一次
对比脚手架
yue-library正在计划提供属于自身的脚手架项目,但相比于单纯的脚手架项目,他更具有以下几点优势:
- 简单易学:优雅的实现各个功能特性,并配备了完善的说明文档
- 轻松引用:不同于脚手架,对于现有的SpringBoot项目也可以引入yue-library
- 更易升级:以spring-boot-starter的方式提供支持,可随时跟进最新稳定版本
- 无需维护:开发者只需专注自身业务逻辑实现,并熟练运用你所使用的特性
- 灵活选取:你可以随时弃用yue-library保留SpringBoot原生使用
收藏一波以表支持吧(≧▽≦)/!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Beetl Starter 1.1.32 发布,增强定制接口
- Beetl Starter 1.1.32 发布,增强定制接口
- Druid 1.2.2 发布,增强 SQL Parser 和历史版本接口兼容
- 开源中国 APP v5.0.2 发布,登录注册接口安全性增强
- Java RPC 框架 Solon 1.3.7 发布,增强 Cloud 接口能力范围
- JeeSite V4.2.0 公测版发布、可视化数据大屏、安全审计、接口增强
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning Web App Development
Semmy Purewal / O'Reilly Media / 2014-3-3 / USD 29.99
Grasp the fundamentals of web application development by building a simple database-backed app from scratch, using HTML, JavaScript, and other open source tools. Through hands-on tutorials, this pract......一起来看看 《Learning Web App Development》 这本书的介绍吧!