高效能 Java 框架。Solon v1.12.3 釋出(春節前兮的最後更)

2023-01-24 06:00:46

一個更現代感的 Java "生態型"應用開發框架:更快、更小、更自由。不是 Spring,沒有 Servlet,也無關 JavaEE;新興獨立的輕量生態 (已有150來個生態外掛) 。主框架僅 0.1 MB。

相對於 Spring Boot 和 Spring Cloud 的專案:

  • 啟動快 5 ~ 10 倍。 (更快)
  • qps 高 2~ 3 倍。 (更高)
  • 執行時記憶體節省 1/3 ~ 1/2。 (更少)
  • 打包可以縮小到 1/2 ~ 1/10;比如,300Mb 的變成了 23Mb。 (更小)
  • 同時支援 jdk8, jdk11, jdk17, jdk19

似曾相似的體驗,入門更簡單:

@Controller
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //手寫模式
            app.get("/", ctx -> ctx.outputAsJson("{message:'Hello world!'}"))
        });
    }

    //註解模式
    @Get
    @Socket
    @Mapping("/hello")
    public String hello(@Param(defaultValue = "java") String name) {
        return String.format("Hello %s!", name);
    }
}

入門探索視訊(使用者錄製):

《bilibili - solon 入門探索》

本次更新:

  • 修復 solon.test :: @TestRollback 事務回滾壞掉的問題(v1.12.0 出現的)
  • 增加 sa-token 攔截的新適配方式,舊的標為棄用。
@Configuration
public class Config {
  @Bean(index = -100)  //-100,是順序位(低值優先)
  public void tokenPathInterceptor() {
     return new SaTokenInterceptor()....;
  }
}

詳見:https://solon.noear.org/article/110

  • 增加 sa-token-dao json 序列化適配(現在有 base64 + json)
  • 增加 RouterInterceptor::postResult 介面(即可以修改返回結果)
@Component
public class GlobalTransInterceptor implements RouterInterceptor {
    @Inject
    private TransService transService;

    @Override
    public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {
        chain.doIntercept(ctx, mainHandler);
    }

    @Override
    public Object postResult(Context ctx, Object result) throws Throwable {
        //此處為攔截處理
        if (result != null && !(result instanceof Throwable) && ctx.action() != null) {
            result = transService.transOneLoop(result, true);
        }

        return result;
    }
}

詳見:https://solon.noear.org/article/242

  • 增加 solon.serialization 所有 json 外掛的統一快捷設定支援
solon.serialization.json:
  dateAsFormat: 'yyyy-MM-dd HH:mm:ss' #設定日期格式(預設輸出為時間戳)
  dateAsTimeZone: 'GMT+8' #設定時區
  dateAsTicks: false #將date轉為毫秒數(和 dateAsFormat 二選一)
  longAsString: true #將long型轉為字串輸出 (預設為false)
  boolAsInt: false   #將bool型轉為字串輸出 (預設為false)
  nullStringAsEmpty: false
  nullBoolAsFalse: false
  nullNumberAsZero: false
  nullArrayAsEmpty: false
  nullAsWriteable: false #輸出所有null值

詳見:https://solon.noear.org/article/94

  • 調整 安全停止時由 403 改為 503 狀態碼
solon.app.safeStop=1

詳見:https://solon.noear.org/article/412

  • 升級 snack3 為 3.2.52
  • 升級 dbvisitor 為 5.2.0
  • 升級 fastjson2 為 2.0.23

生態架構圖:

進一步瞭解 Solon:

專案倉庫: