XXL-TOOL v2.3.0 发布 | Java工具类库

news/2025/10/25 0:53:04/文章来源:https://www.cnblogs.com/xuxueli/p/19164468

Release Notes

  • 1、【强化】缓存工具(CacheTool)重构升级,支持多种缓存策略及特性:
    • 多种缓存类型实现:FIFO、LFU、LRU、Unlimited...等多种实现;
    • 锁分桶设计:在保障缓存读写线程安全基础上,降低锁冲突几率,从而提升缓存性能;
    • 缓存过期策略:支持多种缓存过期策略,如 “写入后过期、访问后过期” 等;
    • 缓存定时清理:支持 定时清理 过期缓存数据,主动降低缓存占用空间;
    • 缓存加载器:支持自定义缓存加载器,更灵活进行数据预热、数据初始化等操作;
    • 缓存监听器:支持自定义缓存监听器,监听缓存数据变化,如缓存清理;
    • 缓存统计信息:支持统计缓存命中数、未命中数、缓存大小等信息;
  • 2、【强化】Http工具(HttpTool)重构升级,支持多种请求策略及特性:
    • 规范Http请求参数:支持自定义 Url、Method、ContentType、Header、Cookie、ConnectTimeout、ReadTimeout、UseCaches 等;
    • 请求拦截器:支持自定义请求拦截器,对请求进行预处理、后处理操作;
    • 请求安全校验:支持自定义Http Authorization信息;
    • 请求数据传递:支持多种请求数据传递方式,包括Body、Form等;
    • 基于Java对象Http交互:Http请求提交入参、以及响应结果均支持Java对象,工具底层屏蔽json序列化/反序列化工作,提升开发效率与工具易用性;
    • 提供链式调用API,提升开发效率及体验;
  • 3、【强化】Http工具(HttpTool)强化:支持接口代理模式方式的HTTP客户端配置及使用;
  • 4、【强化】FileTool 工具能力升级,支持文件“创建、删除、移动、复制、读写”等丰富API;
  • 5、【性能】FileTool 性能升级,针对大文件读写设计分批数据操作、流式导入导出能力,降低内容占用,提升操作性能;
  • 6、【优化】IOTool 代码结构优化,提升 性能、易用性和维护性;

简介

XXL-TOOL 是一个Java工具类库,致力于让Java开发更高效。包含 “日期、集合、字符串、IO、缓存、并发、Excel、Emoji、Response、Pipeline、Http、Json、JsonRpc、Encrypt、Auth、ID、Serializer、验证码、限流器...” 等数十个模块。

文档地址

  • 中文文档:https://www.xuxueli.com/xxl-tool/
  • Github:https://github.com/xuxueli/xxl-tool

组件列表

模块 说明
Core模块 包含 集合、缓存、日期、反射、断言、……等基础工具。
Cache模块 一个高性能的 Java 缓存工具,支持多种缓存类型(FIFO、LFU、LRU等)、锁分桶优化、缓存过期策略(写后过期、访问后过期...)、缓存定时清理、缓存加载器、缓存监听器、缓存信息统计...等功能。
IO模块 一系列处理IO(输入/输出)操作的工具,包括 FileTool、CsvTool、IOTool...等。
Concurrent模块 一系列并发编程工具,具备良好的线程安全、高并发及高性能优势,包括MessageQueue(高性能内存队列,30W+ TPS)、CyclicThread(后台循环线程)、TimeWheel(时间轮组件)、TokenBucket(令牌桶/限流器)等。
Http模块 一系列处理Http通讯、IP、Cookie等相关工具。
Json模块 json序列化、反序列化工具封装,基于Gson。
JsonRpc模块 一个轻量级、跨语言远程过程调用实现,基于json、http实现(对比传统RPC框架:XXL-RPC)。
Excel模块 一个灵活的Java对象和Excel文档相互转换的工具。一行代码完成Java对象和Excel之间的转换。
Emoji模块 一个灵活可扩展的Emoji表情编解码库,可快速实现Emoji表情的编解码。
Response模块 统一响应数据结构体,标准化数据结构、状态码等,降低协作成本。
Pipeline模块 高扩展性流程编排引擎。
Exception模块 异常处理相关工具。
Freemarker模块 模板引擎工具,支持根据模板文件实现 动态文本生成、静态文件生成 等,支持邮件发送、网页静态化场景。
Encrypt模块 一系列处理编解码、加解密的工具,包括 Md5Tool、SHA256Tool、HexTool、Base64Tool...等。
Auth模块 一系列权限认证相关工具,包括JwtTool...等。
ID模块 一系列ID生成工具,支持多种ID生成策略,包括 UUID、Snowflake、Date、Random 等。
Serializer模块 一系列序列化、反序列化工具,支持扩展多种序列化格式,包括 jdk、protobuf、hessian 等。
Captcha模块 一个验证码工具,支持随机字符验证码、数字验证码、中文验证码等多形式。支持自定义验证码生成算法、宽高、颜色、文字字体/大小/间距、背景颜色、边框宽度/边框、干扰策略…等。
... ...

代码示例01:CacheTool 高性能本地缓存

一个高性能的 Java 缓存工具,支持多种缓存类型(FIFO、LFU、LRU等)、锁分桶优化、缓存过期策略(写后过期、访问后过期...)、缓存定时清理、缓存加载器、缓存监听器、缓存信息统计...等功能。

// 1、快速创建缓存
Cache<String, String> cache = CacheTool.newFIFOCache(1000).build();   // 默认FIFO缓存
Cache<String, String> cache = CacheTool.newLFUCache(1000).build();    // LFU缓存
Cache<String, String> cache = CacheTool.newLRUCache(1000).build();    // LRU缓存
Cache<String, String> cache = CacheTool.newUnlimitedCache().build();  // 无限制缓存// 2、缓存详细配置
Cache<String, String> cache2 = CacheTool.newLRUCache().capacity(1000)                 // 缓存容量.expireAfterAccess(30 * 1000)   // 缓存过期时间 30s,过期策略为:访问后过期.expireAfterWrite(30 * 1000)    // 缓存过期时间 30s,过期策略为:写后过期  (expireAfterAccess 与 expireAfterWrite,选择其一设置即可).pruneInterval(5000)            // 定期清理缓存,清理间隔为5s.build();// 3、缓存加载器设置
Cache<String, String> cache = CacheTool.<String,String>newLRUCache().loader(new CacheLoader<>() {               // 自定义缓存加载器,缓存未命中时,会调用该加载器获取数据@Overridepublic String load(String key) throws Exception {return "value-" + key;}}).build();// 4、缓存监听器设置
Cache<String, String> cache = CacheTool.<String,String>newLRUCache().listener(new CacheListener<>() {             // 缓存监听器,缓存删除操作时,会调用该监听器@Overridepublic void onRemove(String key, String value) throws Exception {logger.info("onRemove, key = " + key + ", value = " + value);}}).build();// 5、缓存常规操作;
cache.put(key, "value01");    // 写入缓存
cache.get(key);               // 获取缓存,缓存未命中时,尝试从缓存加载器加载数据(若已设置缓存加载器)
cache.getIfPresent(key);      // 获取缓存,缓存未命中时返回null
cache.remove(key);            // 删除缓存// 6、缓存其他操作
cache.prune()                 // 清理已过期缓存
cache.clear();                // 清空缓存
cache.asMap()                 // 获取全部缓存数据(过滤已过期数据)
cache.size()                  // 缓存对象数量(包含过期数据)
cache.hitCount()              // 缓存命中次数
cache.missCount()             // 缓存未命中次数
cache.isEmpty()               // 缓存是否为空
cache.isFull()                // 缓存是否已满
...

代码示例02:HttpTool 高性能HTTP请求库

一个高性能 HTTP 请求库,API简洁易用、使用高效方便且性能优越;支持 “常规Http请求、Java对象方式请求、接口&注解代理方式请求” 三种使用方式。

  • a、常规使用方式:
// 1、发送 Get 请求,获取响应内容
String response = HttpTool.createPost("https://news.baidu.com/widget?ajax=json&id=ad").execute().response();// 2、发送 Post 请求,获取 Http状态码 以及 响应内容
HttpResponse httpResponse = HttpTool.createPost("https://news.baidu.com/widget?ajax=json&id=ad").execute();
int statusCode = httpResponse.statusCode();   // 获取Http状态码
String response = httpResponse.response();    // 获取响应内容// 3、自定义请求参数
HttpResponse httpResponse = HttpTool.createRequest().url("https://news.baidu.com/widget?ajax=json&id=ad")     // 设置请求地址.method(Method.GET)                                       // 设置请求方式.contentType(ContentType.JSON)                            // 设置请求内容类型.header("header", "value")                                // 设置请求头/header.cookie("cookie", "value")                                // 设置Cookie.connectTimeout(10000)                                    // 设置连接超时时间.readTimeout(10000)                                       // 读取超时.useCaches(false)                                         // 设置是否使用缓存.body("body")                                             // 设置请求体, 仅针对 非Get 请求生效.form("form", "value")                                    // 设置表单参数,仅针对 GET 请求生效,参数将会添加到 url 中;.auth("auth999")                                          // 设置认证信息,本质为设置 header(Authorization) 信息; .interceptor(new HttpInterceptor() {                      // 添加拦截器@Overridepublic void before(HttpRequest httpRequest) {logger.info("before, url = " + httpRequest.getUrl());}@Overridepublic void after(HttpRequest httpRequest, HttpResponse httpResponse) {logger.info("after, response = " + httpResponse.response());}});
  • b、Java对象方式Http请求:
RespDTO result = HttpTool.createPost("https://news.baidu.com/widget?ajax=json&id=ad").request(new RespDTO("jack", 18))   // 设置请求java对象数据,将会自动序列化为json,以 requestBody 形式发送;.execute().response(RespDTO.class);           // 设置响应java对象类型,将会自动将响应内容 反序列化 为java对象;
  • c、接口代理方式Http请求:
// 接口代理,发送请求
DemoService demoService = HttpTool.createClient().url("https://news.baidu.com/widget?ajax=json&id=ad").timeout(10000).proxy(DemoService.class);
RespDTO result = demoService.widget();// 接口定义
public static interface DemoService2{RespDTO widget();
}

代码示例03:FileTool 高性能文件操作工具

一个高性能 File/文件 操作工具,支持丰富文件操作API;针对大文件读写设计分批操作、流式读写能力,降低内存占用、提升文件操作性能。

FileTool.createFile(testFile);                            // 创建文件
FileTool.createDirectories(testFilePath);                 // 创建目录
FileTool.createParentDirectories(testFile);               // 创建文件父目录FileTool.isFile(testFile);                                // 判断文件
FileTool.isDirectory(testFilePath);                       // 判断目录     
FileTool.isSameFile(file1, file2);                        // 判断文件是否相同                     
FileTool.exists(testFile);                                // 判断文件是否存在FileTool.size(testFile);                                  // 获取文件 或 目录大小
FileTool.totalLines(testFile);                            // 获取文件行数FileTool.delete(testFile);                                // 删除文件或目录
FileTool.clean(testFilePath);                             // 清空目录FileTool.copy(src, dest);                                 // 复制文件
FileTool.move(src, dest);                                 // 移动文件或目录FileTool.writeString(testFilePath, content);                       // 写入文件数据
FileTool.writeLines(testFilePath, Iterable<?> lines);              // 写入文件行数据
FileTool.writeLines(testFilePath, Supplier<?> lineSupplier);       // 写入文件数据,以迭代方式、流式写入,避免内存溢出FileTool.readString(testFilePath);                                 // 读取文件数据
FileTool.readLines(testFilePath);                                  // 读取文件行数据
FileTool.readLines(testFilePath, Consumer<String> lineConsumer);   // 读取文件行数据,以迭代方式、流式读取,避免内存溢出
...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ms-dos] copy the whole content of a floppy disk a: to c:\tbasic

In MS-DOS, the command to copy all files from drive A: (typically a floppy disk) to the directory C:\TBASIC is: COPY A:\*.* C:\TBASICExplanation:COPY — the file copy command.A:\*.* — selects all file…

前端三剑客——CSS样式

CSS样式: 进行美化页面即html标签中的style大纲:1.CSS样式应用方式2.CSS样式的选择器3.CSS样式的大致内容CSS样式应用方式:即CSS样式写在哪1.应用在html标签上 <img src="..." style="color:red…

first game (2)

跟完视频版 玩家可左右上移动、拾取金币、碰到史莱姆/掉下会死亡且自动重开、有背景音乐&金币拾取声音、记录拾取金币分数 左侧新建节点:CharacterBody2D "2D角色身体"(玩家) AnimatedSprite2D …

listary pro

Listary 是一款实用的搜索工具 。它能给“我的电脑”(资源管理器)加上许多智能命令,含有收藏文件夹,快速打开最近浏览的文件夹,快速显示/隐藏文件扩展名等等实用功能。能给你日常的收藏和整理文件提高效率。

Luogu P3862 数圈 题解 [ 蓝 ] [ 递推 ] [ 打表 ]

数圈:简单题,主要是递推的思维。 先考虑前三个部分分,首先这玩意是可以容斥算的,只需要求出 \(n\) 个点的完全图的环数,和 \(n\) 个点的无向完全图,经过某条特定边的环数是多少,相减即可得到答案。 直接做显然不…

于课堂与球场间,见成长的底层逻辑

阅读Scalers关于大学生上课需认真听讲的论述,以及娄老师乒乓球刻意训练与“做教练”“做中学”教学理念的分享,仿佛在不同场景中触摸到了成长的共通脉络——无论是知识吸收还是技能习得,都离不开专注的投入、科学的…

CUDA在windows下的安装及配置

一、安装前的准备 (1)查看自己N卡支持的CUDA版本,打开NVIDIA控制面板,选择系统信息 查看系统信息 这里CUDA12.3.107 是支持的最高版本的CUDA,可以向下兼容,且可以安装多个版本的CUDA,可以通过更改环境变量来…

10.24日学习笔记

一、安全目标与威胁模型 CIA 三元组 Confidentiality 机密性 Integrity 完整性 Availability 可用性 扩展目标:Authenticity(真实性)、Non-repudiation(不可否认)、Accountability(可审计)。 威胁模型 Dolev-Ya…

寻找反射型 XSS 漏洞:完整指南

参考:https://www.intigriti.com/researchers/blog/hacking-tools/hunting-for-reflected-xss-vulnerabilities如果单独说一个东西非常差,你很难评估它到底差在哪里。现在有一个参考物进行对比,你就可以更好的感受到…

【ArcMap】计算选中线的长度

方法一:使用计算几何,计算字段的长度 方法二:使用python2的代码计算输入以下代码后回车:import arcpytry:# 获取当前地图中的所有图层mxd = arcpy.mapping.MapDocument("CURRENT")layers = arcpy.mapp…

Day3综合案例2:vue简介

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

一个关于sin的极限

\[\lim_{x\to 0} \dfrac{\sin x}{x} = 1 \]因为 \(y = \sin x\) 关于坐标轴原点中心对称,所以我们只需要证明 \[\lim_{x\to 0^+}\dfrac{\sin x}{x} = 1 \]就行。 我们先规定, \(0 < x < \dfrac{\pi}{2}\)。从这…

高级语言程序设计作业2

高级语言程序设计作业2作业课程:2025高级语言程序设计(福州大学) 作业要求:高级语言程序设计第二次作业 学号:052406103 姓名:叶银珍作业内容 编写并运行书本第3章3.11 编程练习题目中的第1题~第8题第一题#inclu…

在乌鲁木齐办的第一届 新疆tho-东方大巴扎 的一些个人在10月2号和3号的现场观察纪录和乌鲁木齐6月份香蕉喵漫展的一些事

在乌鲁木齐办的第一届 新疆tho-东方大巴扎 的一些个人在10月2号和3号的现场观察纪录和乌鲁木齐6月份香蕉喵漫展的一些事 流浪的猎人 写于2025年10月19日,在10月24日补充了一点东西 由于之前“大米和全国的东方Tho直播…

NumPy 入门示例系列01

NumPy是Python语言的一个扩展程序库。支持高阶大量多维度数组与矩阵运算,针对数组运算提供大量的数学函数库。import numpy as npx = np.arange ( 5 ) print ( x )np.arange(5) 是 NumPy 库中的一个函数调用,用于生…

智能识别的力量:卫生许可证OCR技术的应用与价值

想象一下,一位市场监管执法人员走进一家餐厅,不再需要费力地核对墙上那张纸质许可证的细微信息,只需用手机轻轻一扫,许可证的所有细节——企业信息、有效期、许可项目,乃至它的真伪状态——便在瞬间清晰地呈现在屏…

事务的四大特性(ACID) - Higurashi

ACID 是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称…

2025.10.24

今天学习了二叉树的层序遍历

以 “教练” 之姿引航,以 “实践” 之径求知

原文:优秀的教学方法---做教练与做中学 https://www.cnblogs.com/rocedu/p/4999535.html?winzoom=1 翻开娄老师这篇关于 “做教练” 与 “做中学” 的博文,重构了我对教与学认知。没有用晦涩的理论堆砌,而是以鲜活…

java:logform

/*** encoding: utf-8* 版权所有 2025 ©涂聚文有限公司 * 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3…