JAVA常用开源工具与项目
【XXL开源社区】已经发布一系列开源软件产品,涉及分布式、基础中间件、效率工具等多个领域。包含项目有:任务调度、配置中心、通讯框架(+注册中心)、消息队列、SSO、API管理、爬虫……等等。
访问网址: https://www.xuxueli.com/page/projects.html
1.分布式任务调度平台: XXl-JOB
github源码地址:https://github.com/xuxueli/xxl-job
1.1 架构设计
1.1.1 设计思想
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
1.1.2 系统组成
- 调度模块(调度中心):
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。 - 执行模块(执行器):
负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
接收“调度中心”的执行请求、终止请求和日志请求等。
1.1.3 架构图
2.1 使用总结
2.1.1 一次调用一个,根据路由策略为如下图,这种模式下执行的效率比较低。
2.1.2 一次调用多个,高并发,执行效率高 路由策略为:分片广播
执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;
“分片广播” 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
“分片广播” 和普通任务开发流程一致,不同之处在于可以获取分片参数,获取分片参数进行分片业务处理。
-
- Java语言任务获取分片参数方式:BEAN、GLUE模式(Java)
-
-
// 可参考Sample示例执行器中的示例任务"ShardingJobHandler"了解试用
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();
- 脚本语言任务获取分片参数方式:GLUE模式(Shell)、GLUE模式(Python)、GLUE模式(Nodejs)
-
// 脚本任务入参固定为三个,依次为:任务传参、分片序号、分片总数。以Shell模式任务为例,获取分片参数代码如下
echo "分片序号 index = $2"
echo "分片总数 total = $3"
-
分片参数属性说明:
-
index:当前分片序号(从0开始),执行器集群列表中当前执行器的序号;
total:总分片数,执行器集群的总机器数量;
该特性适用场景如:
-
- 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍;
- 2、广播任务场景:广播执行器机器运行shell脚本、广播集群节点进行缓存更新等
2.接口文档——Swagger
SWAGGER 官网:https://swagger.io/
SpringBoot集成springfox-swagger2构建restful API :https://blog.csdn.net/u014231523/article/details/54562695
SpringMVC集成springfox-swagger2构建restful API:https://blog.csdn.net/u014231523/article/details/54411026
官方Swagger-Wiki使用详情:https://github.com/swagger-api/swagger-core/wiki/Annotations
首先按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。支持从设计和文档到测试和部署的整个API生命周期的开发。
名称 | 描述 | 属性 |
---|---|---|
@Api |
将一个类标记为Swagger资源。 | tags–表示说明 value–也是说明,可以使用tags替代 但是tags如果有多个值,会生成多个list |
@ApiImplicitParam | 表示API操作中的单个参数。 | |
@ApiImplicitParams | 包装器,允许多个ApiImplicitParam对象的列表。 | name–参数名 value–参数说明 dataType–数据类型 paramType–参数类型 example–举例说明 |
@ApiModel | 提供有关Swagger模型的其他信息。 | value–表示对象名 description–描述 |
@ApiModelProperty | 添加和操作模型属性的数据。 | value–字段说明 name–重写属性名字 dataType–重写属性类型 required–是否必填 example–举例说明 hidden–隐藏 |
@ApiOperation | 描述针对特定路径的操作或通常的HTTP方法。 | value用于方法描述 notes用于提示内容 tags可以重新分组(视情况而用) |
@ApiParam | 为操作参数添加其他元数据。 | name–参数名 value–参数说明 required–是否必填 |
@ApiResponse | 描述操作的可能响应。 | |
@ApiResponses | 包装器,允许包含多个ApiResponse对象的列表。 | |
@Authorization | 声明要在资源或操作上使用的授权方案。 | |
@AuthorizationScope | 描述OAuth2授权范围。 |
3.JAVA常用插件
idea代码颜色搭配方案_推荐10个常用IDEA插件:https://blog.csdn.net/weixin_39885469/article/details/111252322
4.JAVA中Idea 使用
4.1 JAVA中成员变量之间的颜色设置
4.2 idea常用快捷键
Ctrl+Alt+B 进入方法实现
Ctrl+Alt+o 移除无用的包导入
Ctrl+Alt+t try-catch等
Ctrl+Alt+l 代码格式化
Ctrl+Alt+u 查看类图
Ctrl+Alt+v 自动补全返回值
Ctrl+Alt+m 代码块封装成方法
Ctrl+Alt+F12 进入文件硬盘位置
Ctrl+Shift+N 快速打开文件
Ctrl+Shift+空格 代码补全提示
Ctrl+Shift+右键 选中单个单词
Ctrl+N 快速打开类
Ctrl+Shift+F 全局搜索关键字
Ctrl+Shift+U 大小写转换
Ctrl+Q 查看方法注释
Ctrl+G 定位到多少行
Ctrl+E 最近的文件
Ctrl+Y 删除当前行
Ctrl+R 文本替换
Ctrl+o 重写方法
Ctrl+i 实现接口方法
Ctrl+F12 显示当前文件的结构(查看类所有方法)
Ctrl+空格 代码自动补全
Ctrl+e 最近打开的文件
Ctrl+Shift+e 最近修改的文件
Alt+F7 查看方法被调用的地方
Alt+7 查看类所有方法
Alt+Enter 导入包
Shift+Alt+上/下 选中代码上下移动
Alt+INSERT 生成方法
5.java中的单元测试
5.1 Java单元测试(Junit+Mock+代码覆盖率) https://www.cnblogs.com/AloneSword/p/4109407.html
其中mock测试使用手册:https://alibaba.github.io/testable-mock/#/zh-cn/doc/use-mock
5.2代码覆盖率用:IDEA中Coverage组件可以展现的覆盖率
5.3Squaretest 自动生成Mock单元测试。https://blog.csdn.net/sun5769675/article/details/111043213
5.4 diff-cover 增量代码单测覆盖率统计工具(待学习)
6.MyBatis 与MyBatis-Plus 的简单使用
MyBatis官网地址: https://mybatis.org/mybatis-3/zh/index.html
MyBatis-Plus官网地址:https://mybatis.plus/guide/#%E7%89%B9%E6%80%A7
常用查询实用案例:https://www.cnblogs.com/zoro-zero/p/12511605.html
常用转义字符:
< | < | 小于 |
> | > | 大于 |
& | & | 与 |
' | ' | 单引号 |
" | " | 双引号 |
7.时序图:
在线工具:https://mermaid-js.github.io/mermaid-live-editor/edit
在线文档: https://mermaid-js.github.io/mermaid/#/sequenceDiagram
使用举例:
sequenceDiagram autonumber 上游系统(大客户,优惠券,服务码)->>数据落盘(财务核算): 同步财务标准化数据 数据落盘(财务核算)->>数据落盘(财务核算):标准化数据验证 alt 验证成功 数据落盘(财务核算)->>流程引擎(数据中心):创建任务进流转引擎(落盘) 流程引擎(数据中心)->>落盘数据落库(数据中心):发起数据落盘流程 落盘数据落库(数据中心)->>落盘数据落库(数据中心):数据验证,幂等性验证 alt 验证成功 落盘数据落库(数据中心)-->>流程引擎(数据中心):数据中心落盘成功 流程引擎(数据中心)-->>数据落盘(财务核算):落盘成功结果通知 数据落盘(财务核算)-->>上游系统(交易平台):成功结果通知 流程引擎(数据中心)->>数据清洗(财务核算):创建任务进流转引擎(清洗任务) par 多线程并行处理 数据清洗(财务核算)->>主数据(数据中心):查询相关主数据信息 Note over 数据清洗(财务核算),主数据(数据中心): 【客户信息、供应商信息、利润中心、成本中心、记帐码、收款公司】 主数据(数据中心)-->>数据清洗(财务核算):返回相关数据信息 数据清洗(财务核算)->>商品信息(商品平台):查询商品信息 Note over 数据清洗(财务核算),商品信息(商品平台): 【业务线、商品类目】 商品信息(商品平台)-->>数据清洗(财务核算):返回相关数据信息 数据清洗(财务核算)->>订单信息(交易系统):查询订单基础信息 Note over 数据清洗(财务核算),订单信息(交易系统): 【订单产品信息,订单完成时间,订单类型,订单渠道】 订单信息(交易系统)-->> 数据清洗(财务核算):返回相关数据信息 数据清洗(财务核算)->>权益发起方(保养年卡,门店美容,拼团):查询权益相关基础信息 Note over 数据清洗(财务核算),权益发起方(保养年卡,门店美容,拼团): 【结算价格,退卡价,发码订单】 权益发起方(保养年卡,门店美容,拼团)-->> 数据清洗(财务核算):返回相关数据信息 end 数据清洗(财务核算)->>数据清洗(财务核算):组装清洗数据 数据清洗(财务核算)-->> 流程引擎(数据中心):清洗组装数据结果通知 alt 返回组装数据 流程引擎(数据中心)->>清洗数据落库(数据中心):发起清洗数据落盘 清洗数据落库(数据中心)->>清洗数据落库(数据中心):数据验证,幂等性验证 清洗数据落库(数据中心)-->>流程引擎(数据中心):数据中心落盘结果通知 alt 验证成功 流程引擎(数据中心)-->>数据清洗(财务核算):清洗成功结果通知 流程引擎(数据中心)->>流程引擎(数据中心):创建财务记账任务流程 else 验证失败 流程引擎(数据中心)-->>数据清洗(财务核算):清洗失败通知 流程引擎(数据中心)->>异常数据记录(数据中心):异常数据记录,后续触发补偿处理 end else 抛出异常信息 流程引擎(数据中心)->>异常数据记录(数据中心):异常数据记录,后续触发补偿处理 end else 验证失败 流程引擎(数据中心)-->>数据落盘(财务核算):落盘失败结果通知 流程引擎(数据中心)->>异常数据记录(数据中心):异常数据记录,后续触发补偿处理 end else 验证失败 数据落盘(财务核算)-->> 上游系统(交易平台):返回失败信息 上游系统(交易平台)->> 上游系统(交易平台):错误数据落库,后续监控&补偿 end