Solon 1.7 重要發(fā)布,更現(xiàn)代感的應用開發(fā)框架

相對于 Spring Boot 和 Spring Cloud 的項目

  • 啟動快 5 ~ 10 倍
  • qps 高 2~ 3 倍
  • 運行時內存節(jié)省 1/3 ~ 1/2
  • 打包可以縮小到 1/2 ~ 1/10(比如养距,90Mb 的變成了 9Mb)

關于 Solon

Solon 是一個更現(xiàn)代感的應用開發(fā)框架诉探,輕量、開放生態(tài)型的棍厌。支持 Web肾胯、Data竖席、Job、Remoting敬肚、Cloud 等任何開發(fā)場景毕荐。

  • 強調,克制 + 簡潔 + 開放 + 生態(tài)的原則
  • 力求艳馒,更小憎亚、更少、更快弄慰、更自由的體驗

目前有近130個生態(tài)插件第美,含蓋了日常開發(fā)的各種需求。

本次主要更新內容

  • 新增 hasordb-solon-plugin 插件
@Service
public class DemoService{
    @Db("db1")
    JdbcTemplate jdbcTemplate;
    
    @Db("db1")
    LambdaTemplate lambdaTemplate;
    
    public void test(){
        var dtoList = jdbcTemplate.queryForList("select * from test_user", TestUser.class);
        var dtoList2 = lambdaTemplate.lambdaQuery(TestUser.class).queryForList();
    }
}
  • 新增 solon.cache.redisson 插件
#完整配置示例
demo.cache1:
  driverType: "redisson" #緩存驅動類型
  server: "localhost:6379"
  password: "1234"
  db: 0 #默認為 0陆爽,可不配置
  defSeconds: 30 #默認為 30秒斋日,可不配置
//配置緩存服務
@Configuration
public class Config {
    //通過 CacheServiceSupplier ,可根據 driverType 自動構建緩存服務
    @Bean(name = "cache2s")
    public CacheService cache2(@Inject("${demo.cache2}") CacheServiceSupplier supplier){
        return supplier.get();
    }
}
  • 新增 solon.sessionstate.redisson 插件
  • 新增 solon.sessionstate.jedis 插件(替代舊的 solon.extend.sessionstate.redis)
  • 新增 solon.sessionstate.local 插件(替代舊的 solon.extend.sessionstate.local)
  • 插件 httputils-solon-plugin 增加對服務上游和地址的檢測
  • 插件 beetlsql-solon-plugin 升級 beetlsql 為 3.14.0
  • 插件 water-solon-plugin 升級 water 為:2.6.2 添加 ak/sk 和 多語言包 適配
  • 插件 mybatis-plus-solon-plugin 增加對 globalConfig 的配置支持
  • 插件 weed3-solon-plugin 升級 weed3 為:3.4.25
@Service
public class DemoService{
    @Db("db1")
    DbContext db1;
    
    public void test(){
        var dtoList = db1.table("test_user").limit(10).selectList("*", TestUser.class);
    }
}
  • 插件 sqltoy-solon-plugin 升級 sqltoy 為:5.1.31
  • 添加 配置注入支持 字符串值 按需轉換為 object(bean)
mybatis.db1:
    typeAliases:    
        - "demo4031.model"
    mappers:        
        - "demo4031.dso.mapper"
    configuration:
        cacheEnabled: false
        logImpl: "org.apache.ibatis.logging.nologging.NoLoggingImpl"
    globalConfig:
        metaObjectHandler: "demo4031.dso.MetaObjectHandlerImpl" #新增的支持
        dbConfig:
            logicDeleteField: "deleted"
  • 添加 Solon Cloud 國際化接口規(guī)范
@Configuration
public class DemoConfig {
    @Bean
    public I18nBundleFactory i18nBundleFactory(){
        //將國際化服務馆类,切換為云端接口
        return new CloudI18nBundleFactory();
    }
}
  • 添加 SessionStateBase 提供會話狀護的基礎能力支持
  • 添加 CloudBreakerService /root 配置支持(可支持動態(tài)創(chuàng)建)
solon.cloud.local:
  breaker:
    root: 100 #默認100 (Qps100 或 信號量為100逗威;視插件而定)
    main: 150 
    
#此配置可以放到配置中心,例:
#solon.cloud.water:
#    server: "waterapi:9371"
#    config.load: "breaker.yml"
  • 添加 MethodWrap::getArounds() 接口
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args, app -> {
            //調試模式下,增加請求包圍攔截器的打印
            if (Solon.cfg().isDebugMode()) {
                app.after(ctx -> {
                    Action action = ctx.action();
                    if (action != null && action.method().getArounds().size() > 0) {
                        StringBuilder buf = new StringBuilder();
                        
                        buf.append("path: ").append(ctx.path()).append(": ");
                        for (InterceptorEntity ie : action.method().getArounds()) {
                            buf.append(ie.getReal().getClass().getName()).append(",");
                        }
                        buf.setLength(buf.length() - 1);
                        
                        System.out.println(buf);
                    }
                });
            }
        });
    }
}
  • 添加 NamiBuilder::timeout 接口
HelloService rpc = Nami.builder().url("tcp://localhost:28080/demoe/rpc")
                                   .encoder(SnackTypeEncoder.instance)
                                   .timeout(60 * 60) //單位:秒
                                   .create(HelloService.class);
  • 調整 session-id-key 可配置 "server.session.cookieName"
#設定會話超時秒數(shù)(單位:秒)
server.session.timeout: 3600 
#設定會話id的cookieName
server.session.cookieName: "E52Ou8sV"
  • 調整 Action::bean() 更名為 controller()
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args);

        //打印所有路由記錄里的控制器名
        Collection<Routing<Handler>> routings = Solon.global().router().getAll(Endpoint.main);
        for(Routing<Handler> routing : routings){
            if(routing.target() instanceof Action){
                Action action = (Action) routing.target();
                System.out.println(action.controller().name());
            }
        }
    }
}
  • 調整 Gateway 內部路由改為 RoutingTable 接口京革,支持 method(之前為 Map)
  • 調整 屬性注入的異常透傳機制
  • 調整 CloudConfigHandler:handler 更名為:handle
  • 調整 CloudDiscoveryHandler:handler 更名為:handle
  • 調整 CloudEventHandler:handler 更名為:handle
  • 調整 CloudEventInterceptor:doInterceptor 更名為:doIntercept
  • 調整 CloudJobInterceptor:doInterceptor 更名為:doIntercept
  • snack3 升級為:3.2.21
  • redisx 升級為:1.4.3

進一步了解 Solon

項目地址

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末合是,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子飒赃,更是在濱河造成了極大的恐慌利花,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件载佳,死亡現(xiàn)場離奇詭異炒事,居然都是意外死亡,警方通過查閱死者的電腦和手機蔫慧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門挠乳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姑躲,你說我怎么就攤上這事睡扬。” “怎么了黍析?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵卖怜,是天一觀的道長。 經常有香客問我阐枣,道長马靠,這世上最難降的妖魔是什么奄抽? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮虑粥,結果婚禮上如孝,老公的妹妹穿的比我還像新娘。我一直安慰自己娩贷,他們只是感情好第晰,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彬祖,像睡著了一般茁瘦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上储笑,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天甜熔,我揣著相機與錄音,去河邊找鬼突倍。 笑死腔稀,一個胖子當著我的面吹牛,可吹牛的內容都是我干的羽历。 我是一名探鬼主播焊虏,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秕磷!你這毒婦竟也來了诵闭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤澎嚣,失蹤者是張志新(化名)和其女友劉穎疏尿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體易桃,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡褥琐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颈抚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踩衩。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贩汉,靈堂內的尸體忽然破棺而出驱富,到底是詐尸還是另有隱情,我是刑警寧澤匹舞,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布褐鸥,位于F島的核電站,受9級特大地震影響赐稽,放射性物質發(fā)生泄漏叫榕。R本人自食惡果不足惜浑侥,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晰绎。 院中可真熱鬧寓落,春花似錦、人聲如沸荞下。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尖昏。三九已至仰税,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抽诉,已是汗流浹背陨簇。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迹淌,地道東北人河绽。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像唉窃,于是被迫代替她去往敵國和親葵姥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容