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

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

  •  
  •   xuxueli · 10 小时 53 分钟前 · 356 次点击

    Release Notes

    • 1 、 [新增] 新增“令牌桶/限流器”工具,TokenBucket ,支持 突发限流、预热限流 等模式;
    • 2 、 [新增] 新增“验证码”工具,CaptchaTool ,支持字符验证码、算式验证码、中文验证码等多形式。支持自定义验证码生成算法、宽高、颜色、文字字体、文字大小、文字间距、背景颜色、边框宽度、边框颜色、干扰组件…等。
    • 3 、 [新增] 新增基础模块工具,包括:ArrayTool 等;
    • 4 、 [强化] 已有工具能力完善,包括:PropTool 、StringTool 等;
    • 5 、 [升级] 升级依赖版本,包括 gson 、nimbus-jose-jwt 、spring 等;

    简介

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

    文档地址

    组件列表

    模块 说明
    Core 模块 包含 集合、缓存、日期、反射、断言、……等基础工具。
    IO 模块 一系列处理 IO (输入/输出)操作的工具。
    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:令牌桶-限流器/TokenBucket 用法

    令牌桶算法实现,具备高精度、预热支持以及线程安全等优势。

    // a 、令牌桶定义,自定义设置每秒获取的令牌数
    TokenBucket smoothBursty = TokenBucket.create(5.0);
    
    // b 、获取令牌, 返回获取的令牌耗时
    double cost = smoothBursty.acquire();
    
    // c 、获取令牌, 尝试获取令牌, 100 毫秒内返回结果;获取不到时返回 false
    boolean result = smoothBursty.tryAcquire(100, TimeUnit.MILLISECONDS);
    

    代码示例 02:验证码/Captcha 用法

    一个验证码工具,支持字符验证码、算式验证码、中文验证码等多形式。支持自定义验证码生成算法、宽高、颜色、文字字体/大小/间距、背景颜色、边框宽度/边框、干扰策略…等。

    • 常规使用方式:
    // a 、定义 CaptchaTool
    CaptchaTool captchaTool = CaptchaTool.build();
    
    // b 、验证码文本生成
    CaptchaTool.TextResult textResult = captchaTool.createText();
    logger.info("验证码文本: {}", textResult.getText());
    logger.info("验证码结果(可选,支持算式验证码): {}", 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());
    
    • 验证码初始化配置方式:
    // 字符验证码,默认
    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());
    
    • 验证码设置参数:
    CaptchaTool captchaTool = CaptchaTool.build()
        .setTextCreator(new CaptchaTool.DefaultTextCreator(6))      // 验证码内容生成组件,支持扩展,默认提供:DefaultTextCreator (字符)、ArithmeticTextCreator (算式)
        .setWidth(180)                                              // 验证码图片宽度
        .setHeight(60)                                              // 验证码图片高度
        .setColors(Arrays.asList(                                   // 验证码图片颜色;如配置多个,验证码生成时随机获取
                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(                                    // 验证码字体;如配置多个,验证码生成时随机获取
                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)                                      // 验证码边框宽度
        .setNoiseColor(Color.WHITE)                                 // 验证码干扰线颜色       
        .setDistortedEngines(Arrays.asList(                         // 验证码干扰组件
                new CaptchaTool.NoneDistorted(),                    // 无干扰
                new CaptchaTool.ShadowDistorted(),                  // 阴影效果
                new CaptchaTool.WaterRippleDistorted(),             // 水波纹效果
                new CaptchaTool.FishEyeDistorted(),                 // 鱼眼效果
                new CaptchaTool.RippleDistorted()                   // 波纹效果
        ));
    

    验证码示例:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 04:56 · PVG 12:56 · LAX 21:56 · JFK 00:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.