Release Notes
- 1、【新增】新增“令牌桶/限流器”工具,TokenBucket,支持 突發(fā)限流、預(yù)熱限流 等模式;
- 2、【新增】新增“驗證碼”工具,CaptchaTool,支持字符驗證碼、算式驗證碼、中文驗證碼等多形式。支持自定義驗證碼生成算法、寬高、顏色、文字字體、文字大小、文字間距、背景顏色、邊框?qū)挾?、邊框顏色、干擾組件…等。
- 3、【新增】新增基礎(chǔ)模塊工具,包括:ArrayTool 等;
- 4、【強(qiáng)化】已有工具能力完善,包括:PropTool、StringTool 等;
- 5、【升級】升級依賴版本,包括gson、nimbus-jose-jwt、spring等;
簡介
XXL-TOOL 是一個Java工具類庫,致力于讓Java開發(fā)更高效。包含 “日期、集合、字符串、IO、緩存、并發(fā)、Excel、Emoji、Response、Pipeline、Http、Json、JsonRpc、Encrypt、Auth、ID、Serializer、驗證碼、限流器...” 等數(shù)十個模塊。
文檔地址
組件列表
| 模塊 | 說明 |
|---|---|
| Core模塊 | 包含 集合、緩存、日期、反射、斷言、……等基礎(chǔ)工具。 |
| IO模塊 | 一系列處理IO(輸入/輸出)操作的工具。 |
| Concurrent模塊 | 一系列并發(fā)編程工具,具備良好的線程安全、高并發(fā)及高性能優(yōu)勢,包括MessageQueue(高性能內(nèi)存隊列,30W+ TPS)、CyclicThread(后臺循環(huán)線程)、TimeWheel(時間輪組件)、TokenBucket(令牌桶/限流器)等。 |
| Http模塊 | 一系列處理Http通訊、IP、Cookie等相關(guān)工具。 |
| Json模塊 | json序列化、反序列化工具封裝,基于Gson。 |
| JsonRpc模塊 | 一個輕量級、跨語言遠(yuǎn)程過程調(diào)用實現(xiàn),基于json、http實現(xiàn)(對比傳統(tǒng)RPC框架:XXL-RPC)。 |
| Excel模塊 | 一個靈活的Java對象和Excel文檔相互轉(zhuǎn)換的工具。一行代碼完成Java對象和Excel之間的轉(zhuǎn)換。 |
| Emoji模塊 | 一個靈活可擴(kuò)展的Emoji表情編解碼庫,可快速實現(xiàn)Emoji表情的編解碼。 |
| Response模塊 | 統(tǒng)一響應(yīng)數(shù)據(jù)結(jié)構(gòu)體,標(biāo)準(zhǔn)化數(shù)據(jù)結(jié)構(gòu)、狀態(tài)碼等,降低協(xié)作成本。 |
| Pipeline模塊 | 高擴(kuò)展性流程編排引擎。 |
| Exception模塊 | 異常處理相關(guān)工具。 |
| Freemarker模塊 | 模板引擎工具,支持根據(jù)模板文件實現(xiàn) 動態(tài)文本生成、靜態(tài)文件生成 等,支持郵件發(fā)送、網(wǎng)頁靜態(tài)化場景。 |
| Encrypt模塊 | 一系列處理編解碼、加解密的工具,包括 Md5Tool、SHA256Tool、HexTool、Base64Tool...等。 |
| Auth模塊 | 一系列權(quán)限認(rèn)證相關(guān)工具,包括JwtTool...等。 |
| ID模塊 | 一系列ID生成工具,支持多種ID生成策略,包括 UUID、Snowflake、Date、Random 等。 |
| Serializer模塊 | 一系列序列化、反序列化工具,支持?jǐn)U展多種序列化格式,包括 jdk、protobuf、hessian 等。 |
| Captcha模塊 | 一個驗證碼工具,支持字符驗證碼、算式驗證碼、中文驗證碼等多形式。支持自定義驗證碼生成算法、寬高、顏色、文字字體/大小/間距、背景顏色、邊框?qū)挾?邊框、干擾策略…等。 |
| ... | ... |
代碼示例01:令牌桶-限流器/TokenBucket 用法
令牌桶算法實現(xiàn),具備高精度、預(yù)熱支持以及線程安全等優(yōu)勢。
// a、令牌桶定義,自定義設(shè)置每秒獲取的令牌數(shù)
TokenBucket smoothBursty = TokenBucket.create(5.0);
// b、獲取令牌, 返回獲取的令牌耗時
double cost = smoothBursty.acquire();
// c、獲取令牌, 嘗試獲取令牌, 100毫秒內(nèi)返回結(jié)果;獲取不到時返回false
boolean result = smoothBursty.tryAcquire(100, TimeUnit.MILLISECONDS);
代碼示例02:驗證碼/Captcha 用法
一個驗證碼工具,支持字符驗證碼、算式驗證碼、中文驗證碼等多形式。支持自定義驗證碼生成算法、寬高、顏色、文字字體/大小/間距、背景顏色、邊框?qū)挾?邊框、干擾策略…等。
- 常規(guī)使用方式:
// a、定義 CaptchaTool
CaptchaTool captchaTool = CaptchaTool.build();
// b、驗證碼文本生成
CaptchaTool.TextResult textResult = captchaTool.createText();
logger.info("驗證碼文本: {}", textResult.getText());
logger.info("驗證碼結(jié)果(可選,支持算式驗證碼): {}", textResult.getResult());
// c、驗證碼圖片生成
BufferedImage image = captchaTool.createImage(textResult);
// d、保存驗證碼圖片
// 方式1:本地保存
ImageIO.write(image, "png", new FileOutputStream("/Users/admin/Downloads/captcha/captcha-1.png"));
// 方式2:Web接口(通過HttpServletResponse)返回
response.setContentType("image/png");
response.setHeader("Cache-Control", "no-cache");
ImageIO.write(image, "png", response.getOutputStream());
- 驗證碼初始化配置方式:
// 字符驗證碼,默認(rèn)
CaptchaTool captchaTool = CaptchaTool.build();
// 字符驗證碼,自定義長度
CaptchaTool captchaTool = CaptchaTool.build().setTextCreator(new CaptchaTool.ArithmeticTextCreator());
// 字符驗證碼,中文漢字
CaptchaTool captchaTool = CaptchaTool.build().setTextCreator(new CaptchaTool.DefaultTextCreator("物華天寶人杰地靈山清水秀景色宜人"));
// 算式驗證碼
CaptchaTool captchaTool = CaptchaTool.build().setTextCreator(new CaptchaTool.ArithmeticTextCreator());
- 驗證碼設(shè)置參數(shù):
CaptchaTool captchaTool = CaptchaTool.build()
.setTextCreator(new CaptchaTool.DefaultTextCreator(6)) // 驗證碼內(nèi)容生成組件,支持?jǐn)U展,默認(rèn)提供:DefaultTextCreator(字符)、ArithmeticTextCreator(算式)
.setWidth(180) // 驗證碼圖片寬度
.setHeight(60) // 驗證碼圖片高度
.setColors(Arrays.asList( // 驗證碼圖片顏色;如配置多個,驗證碼生成時隨機(jī)獲取
new Color(0xb83b5e),
new Color(0xf08a5d),
new Color(0xff9a00),
new Color(0x00b8a9),
new Color(0x004a7c),
new Color(0x3d84a8),
new Color(0x521262)
))
.setFontSize(40) // 驗證碼字體大小
.setFonts(Arrays.asList( // 驗證碼字體;如配置多個,驗證碼生成時隨機(jī)獲取
new Font("Arial", Font.BOLD, 40),
new Font("Courier", Font.BOLD, 40)
))
.setCharSpace(8) // 驗證碼字符間距
.setBackgroundColorFrom(Color.LIGHT_GRAY) // 驗證碼背景顏色
.setBackgroundColorTo(Color.WHITE) // 驗證碼背景顏色,如果From和To背景顏色不一致,會生成漸變顏色;
.setIsBorderDrawn(true) // 驗證碼是否繪制邊框
.setBorderColor(Color.WHITE) // 驗證碼邊框顏色
.setBorderThickness(1) // 驗證碼邊框?qū)挾? .setNoiseColor(Color.WHITE) // 驗證碼干擾線顏色
.setDistortedEngines(Arrays.asList( // 驗證碼干擾組件
new CaptchaTool.NoneDistorted(), // 無干擾
new CaptchaTool.ShadowDistorted(), // 陰影效果
new CaptchaTool.WaterRippleDistorted(), // 水波紋效果
new CaptchaTool.FishEyeDistorted(), // 魚眼效果
new CaptchaTool.RippleDistorted() // 波紋效果
));