V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xuxueli
V2EX  ›  程序员

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

  •  1
     
  •   xuxueli · 1 天前 · 637 次点击

    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 、验证码、限流器...” 等数十个模块。

    文档地址

    组件列表

    模块 说明
    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 对象方式请求、接口&注解代理方式请求” 三种使用方式。

    • 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() {                      // 添加拦截器
                        @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());
                        }
                    });
    
    • 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);   // 读取文件行数据,以迭代方式、流式读取,避免内存溢出
    ...
    
    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   823 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:09 · PVG 05:09 · LAX 14:09 · JFK 17:09
    ♥ Do have faith in what you're doing.