这个开源组织里的项目都是精品
前言
在開(kāi)源中國(guó)里,不知道大家有沒(méi)有留意到一個(gè)Java開(kāi)源組織——Dromara?
這個(gè)組織是由Apache ShenYu(前身是Soul網(wǎng)關(guān))的作者創(chuàng)立,多位Java開(kāi)源作者參與的一個(gè)Java開(kāi)源組織。
在開(kāi)源中國(guó)社區(qū),很多Java開(kāi)源作者都是各自為戰(zhàn),獨(dú)立運(yùn)營(yíng)項(xiàng)目。Domara組織的誕生就是為了聯(lián)合Java開(kāi)源的力量,共建社區(qū),資源共享,共同推行中國(guó)Java開(kāi)源事業(yè)的發(fā)展。
目前Dromara社區(qū)擁有9個(gè)GVP項(xiàng)目,和一些Star數(shù)量很高的項(xiàng)目。這些開(kāi)源項(xiàng)目社區(qū)都很活躍,每一個(gè)都是能提高工作效率的精品開(kāi)源作品。下面就來(lái)盤點(diǎn)下Dromara組織其中的4個(gè)開(kāi)源項(xiàng)目。都是非常實(shí)用的工具,用好這些將會(huì)讓你的生產(chǎn)效率大大提升!
?
Sa-Token
首先我要介紹的是Sa-Token,可能是史上功能最全的輕量級(jí) Java 權(quán)限認(rèn)證框架。
簡(jiǎn)單的使用方式,豐富的特性,強(qiáng)大的功能,你有什么理由拒絕?
官方網(wǎng)站:http://sa-token.dev33.cn/
Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/sa-token
Github托管倉(cāng)庫(kù):https://github.com/dromara/Sa-Token
Sa-Token 是一個(gè)輕量級(jí) Java 權(quán)限認(rèn)證框架,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會(huì)話、單點(diǎn)登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán)等一系列權(quán)限相關(guān)問(wèn)題。
Sa-Token 的 API 設(shè)計(jì)非常簡(jiǎn)單,有多簡(jiǎn)單呢?以登錄認(rèn)證為例,你只需要:
//?在登錄時(shí)寫(xiě)入當(dāng)前會(huì)話的賬號(hào)id StpUtil.login(10001);//?然后在需要校驗(yàn)登錄處調(diào)用以下方法: //?如果當(dāng)前會(huì)話未登錄,這句代碼會(huì)拋出?`NotLoginException`?異常 StpUtil.checkLogin();至此,我們已經(jīng)借助 Sa-Token 完成登錄認(rèn)證!
此時(shí)的你小腦袋可能飄滿了問(wèn)號(hào),就這么簡(jiǎn)單?自定義 Realm 呢?全局過(guò)濾器呢?我不用寫(xiě)各種配置文件嗎?
沒(méi)錯(cuò),在 Sa-Token 中,登錄認(rèn)證就是如此簡(jiǎn)單,不需要任何的復(fù)雜前置工作,只需這一行簡(jiǎn)單的API調(diào)用,就可以完成會(huì)話登錄認(rèn)證!
當(dāng)你受夠 Shiro、SpringSecurity 等框架的三拜九叩之后,你就會(huì)明白,相對(duì)于這些傳統(tǒng)老牌框架,Sa-Token 的 API 設(shè)計(jì)是多么的簡(jiǎn)單、優(yōu)雅!
權(quán)限認(rèn)證示例(只有具備 user:add 權(quán)限的會(huì)話才可以進(jìn)入請(qǐng)求)
@SaCheckPermission("user:add") @RequestMapping("/user/insert") public?String?insert(SysUser?user)?{//?...?return?"用戶增加"; }將某個(gè)賬號(hào)踢下線(待到對(duì)方再次訪問(wèn)系統(tǒng)時(shí)會(huì)拋出NotLoginException異常)
//?使賬號(hào)id為?10001?的會(huì)話強(qiáng)制注銷登錄 StpUtil.logoutByLoginId(10001);在 Sa-Token 中,絕大多數(shù)功能都可以 一行代碼 完成:
StpUtil.login(10001);?????????????????????//?標(biāo)記當(dāng)前會(huì)話登錄的賬號(hào)id StpUtil.getLoginId();?????????????????????//?獲取當(dāng)前會(huì)話登錄的賬號(hào)id StpUtil.isLogin();????????????????????????//?獲取當(dāng)前會(huì)話是否已經(jīng)登錄,?返回true或false StpUtil.logout();?????????????????????????//?當(dāng)前會(huì)話注銷登錄 StpUtil.logoutByLoginId(10001);???????????//?讓賬號(hào)為10001的會(huì)話注銷登錄(踢人下線) StpUtil.hasRole("super-admin");???????????//?查詢當(dāng)前賬號(hào)是否含有指定角色標(biāo)識(shí),?返回true或false StpUtil.hasPermission("user:add");????????//?查詢當(dāng)前賬號(hào)是否含有指定權(quán)限,?返回true或false StpUtil.getSession();?????????????????????//?獲取當(dāng)前賬號(hào)id的Session StpUtil.getSessionByLoginId(10001);???????//?獲取賬號(hào)id為10001的Session StpUtil.getTokenValueByLoginId(10001);????//?獲取賬號(hào)id為10001的token令牌值 StpUtil.login(10001,?"PC");???????????????//?指定設(shè)備標(biāo)識(shí)登錄,常用于“同端互斥登錄” StpUtil.logoutByLoginId(10001,?"PC");?????//?指定設(shè)備標(biāo)識(shí)進(jìn)行強(qiáng)制注銷?(不同端不受影響) StpUtil.openSafe(120);????????????????????//?在當(dāng)前會(huì)話開(kāi)啟二級(jí)認(rèn)證,有效期為120秒? StpUtil.checkSafe();??????????????????????//?校驗(yàn)當(dāng)前會(huì)話是否處于二級(jí)認(rèn)證有效期內(nèi),校驗(yàn)失敗會(huì)拋出異常? StpUtil.switchTo(10044);??????????????????//?將當(dāng)前會(huì)話身份臨時(shí)切換為其它賬號(hào)即使不運(yùn)行測(cè)試,相信您也能意會(huì)到絕大多數(shù) API 的用法。
想要了解更多請(qǐng)參考:https://gitee.com/dromara/sa-token
?
Forest
一款極大程度解放你的Http接入工作的強(qiáng)大Http客戶端框架。
Http協(xié)議很復(fù)雜嗎?那是因?yàn)槟氵€沒(méi)有使用過(guò)Forest,雖然業(yè)內(nèi)有很多其他優(yōu)秀的Http客戶端,但是你錯(cuò)過(guò)了Forest,將會(huì)錯(cuò)過(guò)一大片優(yōu)雅美麗的森林。
官方網(wǎng)站:http://forest.dtflyx.com
Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/forest
Github托管倉(cāng)庫(kù):https://github.com/dromara/forest
Forest 是一個(gè)開(kāi)源的 Java HTTP 客戶端框架,用來(lái)訪問(wèn)第三方服務(wù) RESTful 接口。
它能夠?qū)?HTTP 的請(qǐng)求參數(shù)綁定到 Java 接口上,之后調(diào)用 Java 接口就等于在發(fā)送 HTTP 請(qǐng)求。一切面向于接口。
很多公司需要在 Java 后臺(tái)調(diào)用許多第三方 HTTP 接口,比如微信支付、友盟等等第三方平臺(tái)。
公司內(nèi)部還有很多服務(wù)是用世界最好語(yǔ)言寫(xiě)的,接口自然也只能通過(guò) HTTP 接口來(lái)調(diào)用。于是日積月累下來(lái),在 Java 代碼中就有許許多多各式各樣的 HTTP 調(diào)用接口,而且調(diào)用方式也不統(tǒng)一,有 HttpClient 寫(xiě)的、有 OkHttp 寫(xiě)的、有自己包裝的,光公司內(nèi)部不同人包裝的 HTTP 工具類就有兩三種。
而且 url 基本寫(xiě)死在代碼中,很難維護(hù),不同接口又有不同的參數(shù)傳輸方式,有 GET 、有 POST,有 JSON 傳輸?shù)摹⒂?XML 傳輸?shù)摹.?dāng)有一個(gè)接口需要修改,完了,光找到代碼在什么地方就要花半天時(shí)間。
而 Forest 能幫助我很好地將 HTTP 代碼和業(yè)務(wù)代碼解耦開(kāi)來(lái),請(qǐng)求調(diào)用者不必關(guān)心 HTTP 相關(guān)的細(xì)節(jié)。
自動(dòng)拼接 HTTP 的各種參數(shù)
包括 URL、Header、Body 等等參數(shù)都能依靠 Java 注解來(lái)聲明。
這里就舉一個(gè)高德地圖的栗子,來(lái)看看 Forest 是如何優(yōu)雅的聲明 HTTP 請(qǐng)求接口的:
/***?高德地圖服務(wù)客戶端接口*/ @BaseRequest(baseURL?=?"http://ditu.amap.com") public?interface?Amap?{/***?根據(jù)經(jīng)緯度獲取詳細(xì)地址*?@param?longitude?經(jīng)度*?@param?latitude?緯度*?@return?詳細(xì)地址信息*/@Get("/service/regeo")Map?getLocation(@Query("longitude")?String?longitude,?@Query("latitude")?String?latitude);}...?...Amap?amap?=?Forest.client(Amap.class); //?發(fā)送請(qǐng)求查詢經(jīng)緯度 Map?locationInfo?=?amap.getLocation("32.1242832",?"56.3290434");自動(dòng) JSON 和 XML 轉(zhuǎn)換
其實(shí),我們處理 HTTP 的工作時(shí),除了浪費(fèi)在組裝各種請(qǐng)求參數(shù)外,大部分時(shí)間都花了在序列化和反序列化各種格式的數(shù)據(jù)上,如 JSON 和 XML。
以前用 HttpClient,這些重復(fù)的機(jī)械性工作都要自己來(lái)搞,很是麻煩。
用 Forest 就方便多了,比如要 POST 一個(gè) JSON 對(duì)象,直接掛個(gè) @JSONBody 就好了,就是這么清爽。
//?直接將?MyUserInfo?轉(zhuǎn)換成?JSON //?將服務(wù)端響應(yīng)返回的?JSON?數(shù)據(jù)轉(zhuǎn)換成?Result<Boolean>?類對(duì)象 @Post("http://localhost:8080/user") Result<Booelean>?createUser(@JSONBody?MyUserInfo?user);和 Retrofit 以及 Feign 的比較
之前也用過(guò)這兩款開(kāi)源框架,都很強(qiáng)大,但各有優(yōu)缺點(diǎn)。
Retrofit 的主要的問(wèn)題時(shí)和 OkHttp 綁的太死,有些功能被 OkHttp 限制住了,比如我想處理 Get 請(qǐng)求傳輸 Body 數(shù)據(jù)這種非標(biāo)準(zhǔn)的 HTTP 請(qǐng)求就很難辦到,而 Forest 可以隨意切換 OkHttp 和 HttpClient 作為后端,需要用哪個(gè)時(shí)用哪個(gè)。
Retrofit 注解的豐富性也不如 Forest,比如要實(shí)現(xiàn) HTTP 網(wǎng)絡(luò)代理就要自己去寫(xiě)代碼,而 Forest 提供了 @HTTPProxy 注解,設(shè)置一下就完事了。
如果要擴(kuò)展自定義注解都是基于 OkHttp 的攔截器,不是特別方便,而 Forest 攔截器要比 OkHttp 的方便很多,提供 onInvoke, beforeExecute, onSccuess, onError 等回調(diào)方法,等于把一個(gè)請(qǐng)求的生老病死都涵蓋了。
而 Feign 的問(wèn)題則是和 Spring 綁的太緊,很多功能需要依賴 Spring 去做,太加了 Spring 相關(guān)包又太重了。
Forest 的核心包基本涵蓋了所有 HTTP 所需功能和注解,不依賴 Spring,要輕量許多,但又不失方便性。
想要了解更多請(qǐng)參考:https://gitee.com/dromara/forest
?
LiteFlow
一款超輕量,快速,穩(wěn)定,可編排的組件式流程引擎/規(guī)則引擎。
解耦復(fù)雜系統(tǒng)的神器!如果你正在為設(shè)計(jì)一個(gè)復(fù)雜系統(tǒng)感到頭痛,那么LiteFlow是你不二的選擇,超低的學(xué)習(xí)成本,強(qiáng)大的編排功能,讓你的系統(tǒng)變得更優(yōu)雅!
官方網(wǎng)站:https://yomahub.com/liteflow
Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/liteFlow
Github托管倉(cāng)庫(kù):https://github.com/dromara/liteflow
Liteflow為解耦復(fù)雜邏輯而生,如果你要對(duì)復(fù)雜業(yè)務(wù)邏輯進(jìn)行新寫(xiě)或者重構(gòu),用liteflow最合適不過(guò)。它是一個(gè)輕量,快速的組件式流程引擎框架,組件編排,幫助解耦業(yè)務(wù)代碼,讓每一個(gè)業(yè)務(wù)片段都是一個(gè)組件。
使用Liteflow,你需要去把復(fù)雜的業(yè)務(wù)邏輯按代碼片段拆分成一個(gè)個(gè)小組件,并定義一個(gè)規(guī)則流程配置。這樣,所有的組件,就能按照你的規(guī)則配置去進(jìn)行復(fù)雜的流轉(zhuǎn)。同時(shí)Liteflow支持規(guī)則文件的熱加載,即時(shí)完成修改生效。并提供多種持久化規(guī)則的方式的擴(kuò)展。
使用LiteFLow,三大核心概念是組件,規(guī)則和上下文。
你需要這么像這樣去定義你的組件
//這里普通組件 @LiteflowComponent(id?=?"a",?name?=?"組件A描述") public?class?ACmp?extends?NodeComponent?{@Overridepublic?void?process()?{//do?your?business} }//這是條件組件 @LiteflowComponent(id?=?"b",?name?=?"組件B描述") public?class?BCondCmp?extends?NodeCondComponent?{@Overridepublic?String?processCond()?{//do?your?businessreturn?"e";} }然后去定義你的規(guī)則,LiteFlow支持xml,yml,json三種格式,這里以xml形式為例
<?xml?version="1.0"?encoding="UTF-8"?> <flow><chain?name="chain1"><then?value="a,b(c|d|e)"/>?<!--?c為路由組件,用來(lái)路由到c,d,e?--><then?value="sub_chain"/>?<!--?子流程?--></chain><chain?name="sub_chain"><when?value="f,g,h"/>?<!--?when代表并行?--><then?value="j,k"?/>?<!--?then代表串行?--></chain> </flow>這樣你的系統(tǒng)就會(huì)按照規(guī)則文件定義的方式,去執(zhí)行你的業(yè)務(wù)組件。是不是很簡(jiǎn)單。
那規(guī)則文件定義在哪呢,LiteFlow并不限定你的規(guī)則文件來(lái)源,可以是本地文件,可以是注冊(cè)中心,可以是任何數(shù)據(jù)庫(kù)。LiteFlow提供了非常自由的接口供你擴(kuò)展,你想存儲(chǔ)在哪里都行。改變規(guī)則文件,即可實(shí)時(shí)刷新你的規(guī)則流程!如果你想做一個(gè)靈活度高,伸縮性強(qiáng)的系統(tǒng),LiteFlow是不是非常適合呢。
LiteFlow為每一個(gè)請(qǐng)求都去開(kāi)辟申請(qǐng)了一個(gè)Slot,你可以理解為上下文,所有的組件共享這個(gè)Slot。你可以在任意組件里通過(guò)對(duì)Slot的訪問(wèn)來(lái)獲得任意數(shù)據(jù),也可以存放任意數(shù)據(jù)。你也可以擴(kuò)展Slot,自定義這個(gè)slot的屬性。
@LiteflowComponent(id?=?"a",?name?=?"組件A描述") public?class?ACmp?extends?NodeComponent?{@Overridepublic?void?process()?{Slot?slot?=?this.getSlot();//通過(guò)對(duì)slot的getData,setData,或者存取你自己擴(kuò)展的slot屬性} }正因?yàn)橛蠸lot的存在,才抹平了組件與組件之間的差異性,使得每一個(gè)業(yè)務(wù)組件之間無(wú)強(qiáng)依賴。這樣的設(shè)計(jì),就可以讓你的系統(tǒng)高度自由化,組件復(fù)用,組件調(diào)換順序得以方便的實(shí)現(xiàn)!
LiteFlow還支持2種腳本語(yǔ)言的接入,目前支持Groovy和QLExpress兩種腳本語(yǔ)言。你可以在xml/yml/json定義腳本,以下以xml為例:
<?xml?version="1.0"?encoding="UTF-8"?> <flow><nodes><node?id="s1"?name="普通腳本"?type="script"><![CDATA[def?a=3;def?b=2;slot.setData("s1",a*b);]]></node><node?id="s2"?name="條件腳本"?type="cond_script"><![CDATA[count?=?slot.getData("count");if(count?>?100){return?"a";}else{return?"b";}]]></node></nodes><chain?name="chain1"><then?value="a,b,c,s1"/></chain><chain?name="chain2"><then?value="d,s2(a|b)"/></chain> </flow>那么在什么地方定義是哪種語(yǔ)言的腳本呢,LiteFlow的腳本功能是一個(gè)SPI機(jī)制的實(shí)現(xiàn),你依賴了哪個(gè)腳本包,就以哪種腳本的方式執(zhí)行。
有了腳本語(yǔ)言的支持,連業(yè)務(wù)代碼是不是都可以熱部署了?香不香?
LiteFlow的功能遠(yuǎn)不止這些,想了解更多,請(qǐng)到官網(wǎng)文檔去查看了解。相信LiteFlow會(huì)讓你感到優(yōu)雅和驚艷。
想要了解更多請(qǐng)參考:https://yomahub.com/liteflow
?
JPom
一款簡(jiǎn)而輕的低侵入式在線構(gòu)建、自動(dòng)部署、日常運(yùn)維、項(xiàng)目監(jiān)控軟件
中小公司團(tuán)隊(duì)DevOps的福音!輕量且強(qiáng)大,你不試試?
官方網(wǎng)站:https://jpom.io/
Gitee托管倉(cāng)庫(kù):https://gitee.com/dromara/Jpom
Github托管倉(cāng)庫(kù):https://github.com/dromara/Jpom
Jpom 是一款簡(jiǎn)而輕的低侵入式在線構(gòu)建、自動(dòng)部署、日常運(yùn)維、項(xiàng)目監(jiān)控軟件
在中小公司或者團(tuán)隊(duì)中傳統(tǒng)項(xiàng)目部署、運(yùn)維流程通用的方法是登錄服務(wù)器上傳新的項(xiàng)目包,執(zhí)行相應(yīng)命令管理,如果管理多個(gè)項(xiàng)目則重復(fù)操作上述步驟。
市面上有很許多 DevOps 軟件但是這些軟件基本都會(huì)是難上手,重依賴。Jpom 則是針對(duì)中小公司或者團(tuán)隊(duì)設(shè)計(jì)的一款低侵入,輕依賴的一款輕量級(jí)的 DevOps 軟件。
項(xiàng)目主要功能及特點(diǎn)
創(chuàng)建、修改、刪除項(xiàng)目、Jar包管理
實(shí)時(shí)查看控制臺(tái)日志、備份日志、刪除日志、導(dǎo)出日志
在線構(gòu)建項(xiàng)目發(fā)布項(xiàng)目一鍵搞定
多節(jié)點(diǎn)管理、多節(jié)點(diǎn)自動(dòng)分發(fā)
在線 ?SSH 終端,并且有終端日志和禁用命令
實(shí)時(shí)監(jiān)控項(xiàng)目狀態(tài)異常自動(dòng)報(bào)警
cpu、ram 監(jiān)控、導(dǎo)出堆棧信息、查看項(xiàng)目進(jìn)程端口、服務(wù)器狀態(tài)監(jiān)控
多用戶管理,用戶項(xiàng)目權(quán)限獨(dú)立(上傳、刪除權(quán)限可控制),完善的操作日志
系統(tǒng)路徑白名單模式,杜絕用戶誤操作系統(tǒng)文件
在線管理 Nginx 配置文件、ssl 證書(shū)文件
一鍵安裝(Linux)(推薦)
插件端
如果服務(wù)端也需要被管理,在服務(wù)端上也需要安裝插件端
安裝的路徑位于執(zhí)行命令目錄(數(shù)據(jù)、日志存放目錄默認(rèn)位于安裝路徑,如需要修改參考配置文件:extConfig.yml )
yum?install?-y?wget?&&?wget?-O?install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&&?bash?install.sh?Agent備用地址yum?install?-y?wget?&&?wget?-O?install.sh?https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh?&&?bash?install.sh?Agent支持自動(dòng)安裝jdk環(huán)境yum?install?-y?wget?&&?wget?-O?install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&&?bash?install.sh?Agent?jdk啟動(dòng)成功后,插件端的端口為 2123
服務(wù)端
安裝的路徑位于執(zhí)行命令目錄(數(shù)據(jù)、日志存放目錄默認(rèn)位于安裝路徑,如需要修改參考配置文件:extConfig.yml )
如果需要修改數(shù)據(jù)、日志存儲(chǔ)路徑請(qǐng)參照 extConfig.yml 文件中 jpom.path 配置屬性
yum?install?-y?wget?&&?wget?-O?install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&&?bash?install.sh?Server備用地址yum?install?-y?wget?&&?wget?-O?install.sh?https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh?&&?bash?install.sh?Server支持自動(dòng)安裝jdk環(huán)境yum?install?-y?wget?&&?wget?-O?install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&&?bash?install.sh?Server?jdk支持自動(dòng)安裝jdk和maven環(huán)境yum?install?-y?wget?&&?wget?-O?install.sh?https://dromara.gitee.io/jpom/docs/install.sh?&&?bash?install.sh?Server?jdk+mvn啟動(dòng)成功后,服務(wù)端的端口為 2122 訪問(wèn)管理頁(yè)面 例如http://localhost:2122/
特別提醒:一鍵安裝的時(shí)候注意執(zhí)行命令不可在同一目錄下,即Server端和Agent端不可安裝在同一目錄下
如無(wú)法訪問(wèn),檢查下是否開(kāi)啟了防火墻systemctl status firewalld,如狀態(tài)顯示為綠色Active: active (running)可臨時(shí)關(guān)閉防火墻systemctl stop firewalld,然后重啟防火墻firewall-cmd --reload(建議僅測(cè)試環(huán)境下使用,生產(chǎn)環(huán)境下慎用) 如關(guān)閉防火墻后仍無(wú)法訪問(wèn),并且使用的是云服務(wù)器,還需要到云服務(wù)器管理后臺(tái)中關(guān)閉防火墻
想要了解更多請(qǐng)參考:https://gitee.com/dromara/Jpom
?
最后
以上推薦的開(kāi)源項(xiàng)目,僅僅是Dromara Java社區(qū)里其中4個(gè),Dromara社區(qū)還有很多更為優(yōu)秀的開(kāi)源項(xiàng)目。每一個(gè)項(xiàng)目都凝結(jié)著每個(gè)作者日日夜夜的心血和付出,他們用開(kāi)放的心態(tài)去擁抱這個(gè)世界,用技術(shù)的力量為中國(guó)的開(kāi)源事業(yè)添磚加瓦。
有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
總結(jié)
以上是生活随笔為你收集整理的这个开源组织里的项目都是精品的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 因让员工加班 去哪儿网被处罚3250元!
- 下一篇: 删了自己写的代码?判刑10个月!
