动态

详情 返回 返回

XXL-TOOL v2.3.0 發佈 | Java工具類庫 - 动态 详情

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);   // 讀取文件行數據,以迭代方式、流式讀取,避免內存溢出
...
user avatar journey_64224c9377fd5 头像 AmbitionGarden 头像 jkdataapi 头像 wnhyang 头像 boxuegu 头像 coderdd 头像 ximinghui 头像 seazhan 头像 wxweven 头像 tanking 头像 niandou 头像 timeofsunrise 头像
点赞 23 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.