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

1 天前
 xuxueli

Release Notes

简介

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

文档地址

组件列表

模块 说明
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<>() {               // 自定义缓存加载器,缓存未命中时,会调用该加载器获取数据
                    @Override
                    public String load(String key) throws Exception {
                        return "value-" + key;
                    }
                })
                .build();
                
// 4 、缓存监听器设置
Cache<String, String> cache = CacheTool.<String,String>newLRUCache()
                .listener(new CacheListener<>() {             // 缓存监听器,缓存删除操作时,会调用该监听器
                    @Override
                    public 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 对象方式请求、接口&注解代理方式请求” 三种使用方式。

// 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() {                      // 添加拦截器
                    @Override
                    public void before(HttpRequest httpRequest) {
                        logger.info("before, url = " + httpRequest.getUrl());
                    }
                    @Override
                    public void after(HttpRequest httpRequest, HttpResponse httpResponse) {
                        logger.info("after, response = " + httpResponse.response());
                    }
                });
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 对象;
// 接口代理,发送请求
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);   // 读取文件行数据,以迭代方式、流式读取,避免内存溢出
...
715 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1168251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX