對標 Spring Boot & Cloud ,輕量框架 Solon 1.5.2 重要釋出

劉之西東發表於2021-06-16

Solon 是一個輕量的Java基礎開發框架。強調,剋制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多種開發模式。短小而精悍!

Solon Cloud 是一系列的介面標準和配置規範,算是 Solon 的分散式開發套件方案。

快速瞭解Solon的材料:

《Solon 特性簡集,相較於 Springboot 有什麼區別?》

《Solon Cloud 分散式服務開發套件清單,感覺受與 Spring Cloud 的不同》

《Solon 的想法與架構筆記》

《Solon 生態外掛清單》,目前已有100多個生態外掛

《Solon 框架入門系列》

《Solon Aop 特色開發系列》

所謂更小:

核心0.1m,最小的介面開發單位0.2m(相較於 Dubbo、Springboot 的依賴包,小到可以乎略不計)

所謂更快:

本機http helloworld測試,Qps可達12萬之多。可參考:《helloworld_wrk_test

所謂更自由:(程式碼操控自由)

// 除了註解模式之外,還可以按需手動
//
//手動獲取配置(Props 為 Properties 增強版)
Props db = Solon.cfg().getProp("db");

//手動獲取容器裡的Bean
UserService userService = Aop.get(UserService.class);

//手動監聽http post請求
Solon.global().post("/user/update", x-> userService.updateById(x.paramMap()));

//手動新增個RPC服務
Solon.global().add("/rpc/", HelloService.class, true);

//手動獲取一個RPC服務消費端
HelloService helloService = Nami.builder().create(HelloService.class);

//手動為容器新增元件
Aop.wrapAndPut(DemoService.class);

本次版本主要變化:

1、部分外掛名調整

原外掛 升級為新外掛 原因說明
solon.extend.auth solon.auth 地位升級
solon.extend.data solon.data 地位升級
solon.extend.validation solon.validation 地位升級
solon.extend.jetty.jsp solon.boot.jetty.add.jsp 增加與 solon.boot.jetty 關聯性
solon.extend.jetty.websocket solon.boot.jetty.add.websocket 增加與 solon.boot.jetty 關聯性
solon.extend.undertow.jsp solon.boot.undertow.add.jsp 增加與 solon.boot.undertow 關聯性

2、部分包名調整

原包名 升級為新包名 原因說明
solon.extend.auth.* solon.auth.* 地位升級
solon.extend.validation.* solon.validation.* 地位升級
solon.extend.data.* solon.data.* 地位升級
solon.core.tran.* solon.data.tran.* 轉到 solon.data 統一維護
solon.core.cache.* solon.data.cache.* 轉到 solon.data 統一維護

3、solon.validation 外掛其它調整與升級

  • 改動 ValidatorManager,由單例模式改為靜態模式;並對介面做了優化
  • 調整 ValidatorManager::onFailure 更名為 ValidatorManager::setFailureHandler
  • 調整 NoRepeatLock 更名為 NoRepeatSubmitChecker(與其它檢測器統一為Checker的概念)

4、solon.validation 外掛增加實體驗證支援(也可切換為jsr303)

示例:

@Valid
@Mapping("/demo2/valid")
@Controller
public class ValidController {
    @NoRepeatSubmit
    @Mapping("nrs")
    public String nrs() {
        return "OK";
    }

    @NotBlank({"val1", "val2"})
    @Mapping("nblank")
    public String nblank(String val1, String val2) {
        return "OK";
    }
    
    @Mapping("bean")
    public String bean(@Validated ValidModel model) {
        return "OK";
    }
}

@Data
public class ValidModel {
    @NotBlank(message = "手機號不能為空")
    private String mobile;

    @NotBlank(message = "密碼不能為空")
    private String password;
}

5、solon.auth 外掛增加模板標籤支援

  • 調整 各模板引擎內部介面名稱,顯得更統一些
  • 模板 beetl 增加許可權認證標籤支援
  • 模板 enjoy 增加許可權認證標籤支援
  • 模板 freemarker 增加許可權認證標籤支援
  • 模板 jsp 增加許可權認證標籤支援
  • 模板 thymeleaf 增加許可權認證標籤支援
  • 模板 velocity 增加許可權認證標籤支援

beetl 示例:

<#authPermissions name="user:del">
我有user:del許可權
</#authPermissions>

<#authRoles name="admin">
我有admin角色
</#authRoles>

enjoy 示例:

#authPermissions("user:del")
我有user:del許可權
#end

#authRoles("admin")
我有admin角色
#end

freemarker 示例:

<@authPermissions name="user:del">
我有user:del許可權
</@authPermissions>

<@authRoles name="admin">
我有admin角色
</@authRoles>

6、solon core 的事務與快取定義介面遷到:solon.data 外掛

  • 移動 org.noear.solon.core.cache.CacheService 到 org.noear.solon.data.cache.CacheService
  • 移動 org.noear.solon.core.tran.TranExecutor 到 org.noear.solon.data.tran.TranExecutor
  • 移動 org.noear.solon.core.tran.TranUtils 到 org.noear.solon.data.tran.TranUtils

7、增加 httputils-solon-plugin 外掛

這是基於Solon Cloud 註冊發現服務的 HttpUtils 工具,為Rpc客戶端方案外提供一個便宜的服務呼叫方式。

非常適合k8s和傳統註冊發現服務等不同場景。示例:

String rst = HttpUtils.http("helloservice", "/hello").data("name","noer").post();
System.out.println(rst);

8、請求引數自動轉換日期的格式增加到9種

"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
"yyyy-MM-dd HH:mm:ss,SSS"
"yyyy-MM-dd HH:mm:ss.SSS"
"yyyyMMddHHmmssSSSZ"
"yyyy-MM-dd'T'HH:mm:ss"
"yyyy-MM-dd HH:mm:ss"
"yyyy-MM-dd"
"HH:mm:ss"

9、其它

  • 修復載入配置時,值為null會出錯的問題
  • 升級snack3,增加更多的時間處理格式
  • 增加更多的時間處理格式(與snack3同)
  • enjoy 模式,分離 debug 引擎的例項
  • Validator 介面的原函式 validate 更名為 validateOfContext;並增加 validateOfEntity 函式定義(支援實體驗證)
  • solon.extend.jsr303 外掛不再自動注入到容器(Solon Validation,已支援實體驗證)

附:專案地址

附:入門示例

相關文章