Stories

Detail Return Return

XXL-TOOL v2.3.0 發佈 | Java工具類庫 - Stories Detail

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 Avatar AmbitionGarden Avatar jkdataapi Avatar wnhyang Avatar boxuegu Avatar coderdd Avatar ximinghui Avatar seazhan Avatar wxweven Avatar tanking Avatar niandou Avatar timeofsunrise Avatar
Favorites 23 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.