
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 模块 | 一个验证码工具,支持随机字符验证码、数字验证码、中文验证码等多形式。支持自定义验证码生成算法、宽高、颜色、文字字体/大小/间距、背景颜色、边框宽度/边框、干扰策略…等。 |
| ... | ... |
一个高性能的 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() // 缓存是否已满 ... 一个高性能 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 = " + ttpRequest.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(); } 一个高性能 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); // 读取文件行数据,以迭代方式、流式读取,避免内存溢出 ...