这个开源组织里的项目都是精品

前言 在开源中国里,不知道大家有没有留意到一个Java开源组织——Dromara? 这个组织是由Apache ShenYu(前身是Soul网关)的作者创立,多位Java开源作者参与的一个Java开源组织。 在开源中国社区,很多Java开源作者都是各自为战,独立运营项目。Domara组织的诞生就是为了联合Java开源的力量,共建社区,资源共享,共同推行中国Java开源事业的发展。 目前Dromara社区拥有9个GVP项目,和一些Star数量很高的项目。这些开源项目社区都很活跃,每一个都是能提高工作效率的精品开源作品。下面就来盘点下Dromara组织其中的4个开源项目。都是非常实用的工具,用好这些将会让你的生产效率大大提升! Sa-Token 首先我要介绍的是Sa-Token,可能是史上功能最全的轻量级 Java 权限认证框架。 简单的使用方式,丰富的特性,强大的功能,你有什么理由拒绝? 官方网站:sa-token.dev33.cn/ Gitee托管仓库:gitee.com/dromara/sa-… Github托管仓库:github.com/dromara/Sa-… Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题。 Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:

  至此,我们已经借助 Sa-Token 完成登录认证! 此时的你小脑袋可能飘满了问号,就这么简单?自定义 Realm 呢?全局过滤器呢?我不用写各种配置文件吗? 没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证! 当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅! 权限认证示例(只有具备 user:add 权限的会话才可以进入请求)

  将某个账号踢下线(待到对方再次访问系统时会抛出NotLoginException异常)

  在 Sa-Token 中,绝大多数功能都可以 一行代码 完成:

  即使不运行测试,相信您也能意会到绝大多数 API 的用法。 想要了解更多请参考:gitee.com/dromara/sa-… Forest 一款极大程度解放你的Http接入工作的强大Http客户端框架。 Http协议很复杂吗?那是因为你还没有使用过Forest,虽然业内有很多其他优秀的Http客户端,但是你错过了Forest,将会错过一大片优雅美丽的森林。 官方网站:forest.dtflyx.com Gitee托管仓库:gitee.com/dromara/for… Github托管仓库:github.com/dromara/for… Forest 是一个开源的 Java HTTP 客户端框架,用来访问第三方服务 RESTful 接口。 它能够将 HTTP 的请求参数绑定到 Java 接口上,之后调用 Java 接口就等于在发送 HTTP 请求。一切面向于接口。 很多公司需要在 Java 后台调用许多第三方 HTTP 接口,比如微信支付、友盟等等第三方平台。 公司内部还有很多服务是用世界最好语言写的,接口自然也只能通过 HTTP 接口来调用。于是日积月累下来,在 Java 代码中就有许许多多各式各样的 HTTP 调用接口,而且调用方式也不统一,有 HttpClient 写的、有 OkHttp 写的、有自己包装的,光公司内部不同人包装的 HTTP 工具类就有两三种。 而且 url 基本写死在代码中,很难维护,不同接口又有不同的参数传输方式,有 GET 、有 POST,有 JSON 传输的、有 XML 传输的。 当有一个接口需要修改,完了,光找到代码在什么地方就要花半天时间。 而 Forest 能帮助我很好地将 HTTP 代码和业务代码解耦开来,请求调用者不必关心 HTTP 相关的细节。 自动拼接 HTTP 的各种参数 包括 URL、Header、Body 等等参数都能依靠 Java 注解来声明。 这里就举一个高德地图的栗子,来看看 Forest 是如何优雅的声明 HTTP 请求接口的:

  自动 JSON 和 XML 转换 其实,我们处理 HTTP 的工作时,除了浪费在组装各种请求参数外,大部分时间都花了在序列化和反序列化各种格式的数据上,如 JSON 和 XML。 以前用 HttpClient,这些重复的机械性工作都要自己来搞,很是麻烦。 用 Forest 就方便多了,比如要 POST 一个 JSON 对象,直接挂个 @JSONBody 就好了,就是这么清爽。

  和 Retrofit 以及 Feign 的比较 之前也用过这两块开源框架,都很强大,但各有优缺点。 Retrofit 的主要的问题时和 OkHttp 绑的太死,有些功能被 OkHttp 限制住了,比如我想处理 Get 请求传输 Body 数据这种非标准的 HTTP 请求就很难办到,而 Forest 可以随意切换 OkHttp 和 HttpClient 作为后端,需要用哪个时用哪个。 Retrofit 注解的丰富性也不如 Forest,比如要实现 HTTP 网络代理就要自己去写代码,而 Forest 提供了 @HTTPProxy 注解,设置一下就完事了。 如果要扩展自定义注解都是基于 OkHttp 的拦截器,不是特别方便,而 Forest 拦截器要比 OkHttp 的方便很多,提供 onInvoke, beforeExecute, onSccuess, onError 等回调方法,等于把一个请求的生老病死都涵盖了。 而 Feign 的问题则是和 Spring 绑的太紧,很多功能需要依赖 Spring 去做,太加了 Spring 相关包又太重了。 Forest 的核心包基本涵盖了所有 HTTP 所需功能和注解,不依赖 Spring,要轻量许多,但又不失方便性。 想要了解更多请参考:gitee.com/dromara/for… LiteFlow 一款超轻量,快速,稳定,可编排的组件式流程引擎/规则引擎。 解耦复杂系统的神器!如果你正在为设计一个复杂系统感到头痛,那么LiteFlow是是你不二的选择,超低的学习成本,强大的编排功能,让你的系统变得更优雅! 官方网站:yomahub.com/liteflow Gitee托管仓库:gitee.com/dromara/lit… Github托管仓库:github.com/dromara/lit… Liteflow为解耦复杂逻辑而生,如果你要对复杂业务逻辑进行新写或者重构,用liteflow最合适不过。它是一个轻量,快速的组件式流程引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。 使用Liteflow,你需要去把复杂的业务逻辑按代码片段拆分成一个个小组件,并定义一个规则流程配置。这样,所有的组件,就能按照你的规则配置去进行复杂的流转。同时Liteflow支持规则文件的热加载,即时完成修改生效。并提供多种持久化规则的方式的扩展。 使用LiteFLow,三大核心概念是组件,规则和上下文。 你需要这么像这样去定义你的组件

  然后去定义你的规则,LiteFlow支持xml,yml,json三种格式,这里以xml形式为例

  这样你的系统就会按照规则文件定义的方式,去执行你的业务组件。是不是很简单。 那规则文件定义在哪呢,LiteFlow并不限定你的规则文件来源,可以是本地文件,可以是注册中心,可以是任何数据库。LiteFlow提供了非常自由的接口供你扩展,你想存储在哪里都行。改变规则文件,即可实时刷新你的规则流程!如果你想做一个灵活度高,伸缩性强的系统,LiteFlow是不是非常适合呢。 LiteFlow为每一个请求都去开辟申请了一个Slot,你可以理解为上下文,所有的组件共享这个Slot。你可以在任意组件里通过对Slot的访问来获得任意数据,也可以存放任意数据。你也可以扩展Slot,自定义这个slot的属性。

  正因为有Slot的存在,才抹平了组件与组件之间的差异性,使得每一个业务组件之间无强依赖。这样的设计,就可以让你的系统高度自由化,组件复用,组件调换顺序得以方便的实现! LiteFlow还支持2种脚本语言的接入,目前支持Groovy和QLExpress两种脚本语言。你可以在xml/yml/json定义脚本,以下以xml为例:

  那么在什么地方定义是哪种语言的脚本呢,LiteFlow的脚本功能是一个SPI机制的实现,你依赖了哪个脚本包,就以哪种脚本的方式执行。 有了脚本语言的支持,连业务代码是不是都可以热部署了?香不香? LiteFlow的功能远不止这些,想了解更多,请到官网文档去查看了解。相信LiteFlow会让你感到优雅和惊艳。 想要了解更多请参考:yomahub.com/liteflow JPom 一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 中小公司团队DevOps的福音!轻量且强大,你不试试? 官方网站:jpom.io/ Gitee托管仓库:gitee.com/dromara/Jpo… Github托管仓库:github.com/dromara/Jpo… Jpom 是一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 在中小公司或者团队中传统项目部署、运维流程通用的方法是登录服务器上传新的项目包,执行相应命令管理,如果管理多个项目则重复操作上述步骤。 市面上有很许多 DevOps 软件但是这些软件基本都会是难上手,重依赖。Jpom 则是针对中小公司或者团队设计的一款低侵入,轻依赖的一款轻量级的 DevOps 软件。 项目主要功能及特点 创建、修改、删除项目、Jar包管理 实时查看控制台日志、备份日志、删除日志、导出日志 在线构建项目发布项目一键搞定 多节点管理、多节点自动分发 在线 SSH 终端,并且有终端日志和禁用命令 实时监控项目状态异常自动报警 cpu、ram 监控、导出堆栈信息、查看项目进程端口、服务器状态监控 多用户管理,用户项目权限独立(上传、删除权限可控制),完善的操作日志 系统路径白名单模式,杜绝用户误操作系统文件 在线管理 Nginx 配置文件、ssl 证书文件 一键安装(Linux)(推荐) 插件端 如果服务端也需要被管理,在服务端上也需要安装插件端 安装的路径位于执行命令目录(数据、日志存放目录默认位于安装路径,如需要修改参考配置文件:extConfig.yml )

  启动成功后,插件端的端口为 2123 服务端 安装的路径位于执行命令目录(数据、日志存放目录默认位于安装路径,如需要修改参考配置文件:extConfig.yml ) 如果需要修改数据、日志存储路径请参照 extConfig.yml 文件中 jpom.path 配置属性

  启动成功后,服务端的端口为 2122 访问管理页面 例如http://localhost:2122/ 特别提醒:一键安装的时候注意执行命令不可在同一目录下,即Server端和Agent端不可安装在同一目录下 如无法访问,检查下是否开启了防火墙systemctl status firewalld,如状态显示为绿色Active: active (running)可临时关闭防火墙systemctl stop firewalld,然后重启防火墙firewall-cmd --reload(建议仅测试环境下使用,生产环境下慎用) 如关闭防火墙后仍无法访问,并且使用的是云服务器,还需要到云服务器管理后台中关闭防火墙 想要了解更多请参考:gitee.com/dromara/Jpo… 最后 以上推荐的开源项目,仅仅是Dromara Java社区里其中4个,Dromara社区还有很多更为优秀的开源项目。每一个项目都凝结着每个作者日日夜夜的心血和付出,他们用开放的心态去拥抱这个世界,用技术的力量为中国的开源事业添砖加瓦。 我们努力发着光,为了照亮别人,也为了明亮自我。 同时也希望有更多的Java开源作者能加入Dromara社区,凝聚吾辈之力,汇聚诸君之绩,披荆斩棘,同舟共济。 最后,看到这的童鞋,点赞,分享,在看点起来啊! 作者:铂赛东🐶 链接:https://juejin.cn/post/7013553128121303053 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

横空出世!IDEA画图神器来了,比Visio快10倍!

程序员在工作中,经常会有绘制时序图、流程图的需求,尤其是在写文档的时候。平时我们会选择ProcessOn这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更熟悉代码的了。今天给大家推荐一款画图工具PlantUML,可以配合IDEA使用,画图更高效! SpringBoot实战电商项目mall(50k+star)地址:github.com/macrozheng/… PlantUML简介 PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。 下面使用PlantUML来绘制一张流程图,可以实时预览,速度也很快! 安装 通过在IDEA中安装插件来使用PlantUML无疑是最方便的,接下来我们来安装下IDEA的PlantUML插件。 首先在IDEA的插件市场中搜索PlantUML,安装这个排名第一的插件; 有时候网络不好的话可能下载不下来,可以点击Plguin homepage按钮访问插件主页,然后选择合适的版本下载压缩包; 下载成功后,选择从本地安装即可。 使用 接下来我们使用PlantUML插件分别绘制时序图、用例图、类图、活动图、思维导图,来体验下PlantUML是不是真的好用! 时序图 时序图(Sequence Diagram),是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。我们在学习Oauth2的时候,第一步就是要搞懂Oauth2的流程,这时候有个时序图帮助可就大了。下面我们使用PlantUML来绘制Oauth2中使用授权码模式颁发令牌的时序图。 首先我们需要新建一个PlantUML文件,选择时序图; 我们可以通过PlantUML提供的语法来生成Oauth2的时序图,语法还是非常简单的,具体内容如下;

该代码将生成如下时序图,用写代码的方式来画时序图,是不是够炫酷; 本时序图关键说明如下: title可以用于指定UML图的标题; 通过actor可以声明人形的参与者; 通过participant可以声明普通类型的参与者; 通过as可以给参与者取别名; 通过->可以绘制参与者之间的关系,虚线箭头可以使用-->; 在每个参与者关系后面,可以使用:给关系添加说明; 通过autonumber我们可以给参与者关系自动添加序号; 通过activate和deactivate可以指定参与者的生命线。 这里还有个比较神奇的功能,当我们右键时序图时,可以生成一个在线访问的链接; 直接访问这个链接,可以在线访问UML时序图,并进行编辑,是不是很酷! 用例图 用例图(Usecase Diagram)是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,我们可以很方便地表示出系统中各个角色与用例之间的关系,下面我们用PlantUML来画个用例图。 首先我们需要新建一个PlantUML文件,选择用例图,该用例图用于表示顾客、主厨、美食家与餐馆中各个用例之间的关系,具体内容如下;

该代码将生成如下用例图; 本用例图关键说明如下: left to right direction表示按从左到右的顺序绘制用例图,默认是从上到下; 通过package可以对角色和用例进行分组; 通过actor可以定义用户; 通过usecase可以定义用例; 角色和用例之间的关系可以使用-->来表示。 类图 类图(Class Diagram)可以表示类的静态结构,比如类中包含的属性和方法,还有类的继承结构。下面我们用PlantUML来画个类图。 首先我们需要新建一个PlantUML文件,选择类图,该图用于表示Person、Student、Teacher类的结构,具体内容如下;

该代码将生成如下类图,看下代码和类图,是不是发现和我们用代码定义类还挺像的; 本类图关键说明如下: 通过class可以定义类; 通过在属性和方法左边加符号可以定义可见性,-表示private,#表示protected,+表示public; 通过<|--表示类之间的继承关系。 活动图 活动图(Activity Diagram)是我们用的比较多的UML图,经常用于表示业务流程,比如电商中的下单流程就可以用它来表示。下面我们用PlantUML来画个活动图。 首先我们需要新建一个PlantUML文件,选择活动图,这里使用了mall项目中购物车中生成确认单的流程,具体内容如下;

该代码将生成如下活动图,在活动图中我们既可以用if else,又可以使用switch,甚至还可以使用while循环,功能还是挺强大的; 本活动图关键说明如下: 通过start和stop可以表示流程的开始和结束; 通过:和;中间添加文字来定义活动流程节点; 通过if+then+endif定义条件判断; 通过switch+case+endswitch定义switch判断。 思维导图 思维导图(Mind Map),是表达发散性思维的有效图形工具,它简单却又很有效,是一种实用性的思维工具。之前在我的mall学习教程中就有很多地方用到了,下面我们用PlantUML来画个思维导图。 首先我们需要新建一个PlantUML文件,选择思维导图,这里使用了mall学习路线中的大纲视图,具体内容如下;

该代码将生成如下思维导图,其实使用PlantUML我们可以自己定义图形的样式,这里我自定义了下颜色; 本思维导图关键说明如下: 通过+和-可以表示思维导图中的节点,具有方向性; 通过[#颜色]可以定义节点的边框颜色; 通过_可以去除节点的边框; 总结 虽然目前可以绘制UML图的图形化工具很多,但是对于程序员来说,使用代码来绘图可能更直接,效率更高,尤其是配合IDEA使用。如果你想使用代码来绘图,不妨尝试下PlantUML吧。 参考资料 官方文档:plantuml.com/zh/ 作者:MacroZheng 链接:https://juejin.cn/post/7017988314053492767 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Airtest自动化测试工具

一开始知道Airtest大概是在年初的时候,当时,看了一下官方的文档,大概是类似Sikuli的一个工具,主要用来做游戏自动化的,通过截图的方式用来解决游戏自动化测试的难题。最近,移动端测试的同事尝试用它的poco库来做自动化,看样子还不错,所以,这里推荐给各位同学。 官方网站 http://airtest.netease.com/ ### Airtest IDE 这是Airtest测试工具标配的IDE,目的是方便我们用于录制/编写自动化测试。 你可以使用账号登录或直接点击左下角“skip”按钮跳过。 启动Android模拟器或者用PC连接一台手机。通过adb命令检查移动设备。

  当我在Android模拟器中操作时,Airtest IDE右侧的界面是同步的,这一点比很多移动测试工具做的优秀,例如,appium desktop必须手动刷新才能获取最新的界面。 #### Airtest Airtest IDE支持Airtest脚本的录制,用法非常简单,你甚至可以先不用看它的API,通过录制来熟悉它的API。 右侧Airtest窗口以及API,点击右上角录制按钮,然后,就可以在映射的Android模拟器界面上点点点了。 以下是我点点点,生成的脚本。 过程非常简单,点击桌面上的计算器图标,打开编辑器输入1+1= ,然后,点击工具栏上的 “运行”按钮,就可以回放了。 这种脚本更适合游戏,因为游戏界面很难定位,图片识别(截图)的方式确实是不错的选择。 ###Poco Poco是另外一种形式的脚本,它与一般的自动化工具一样,通过元素本身的属性来定位元素,并且它同样支持录制。\ 点击右上角第一个的录制按钮。然后,继续在android映射的界面上点点点。 因为脚本里面没截图,我就单独拿出来了。

  从poco的API来看比appium更为简洁。 如果你要做的是非游戏的APP的话,poco应该是我们后面学习的重点。这样的代码不管是和单元测试框架结合还是使用PO设计模式都是没有问题的。 而且,同样提供元素的属性展示,又有录制功能加持,在开发效率上应该会提高不少。 如果,你刚好又会Python,那么这将是一个不错的选择。   from:https://www.cnblogs.com/fnng/p/10247339.html