Spring Boot & Cloud 輕量替代框架 Solon 1.3.37 發布

Solon 是一個微型的Java開發框架。強調,克制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Micro service、WebSocket、Socket 等多種開發模式。

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

快速了解Solon的材料:

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

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

《Solon 的想法與架構筆記》

《Solon 框架入門》

所謂更小:

內核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.jsr303 組件,支援 jsr303 bean驗證能力

Solon 原有的驗證體系是基於 Context 的,基於方法或參數的驗證。現在算是補齊了 Bean 或 Model 的驗證能力。

@Valid
@Controller
public class ValidController {
    //這是基於 context 的驗證體系(可以批量驗證參數)
    @NotZero({"val1", "val2"})
    @Mapping("nzero")
    public String nzero(int val1, int val2) {
        return "OK";
    }

    //這也是基於 context 的驗證體系
    @Mapping("size")
    public String size(@Length(min = 2, max = 5, message = "測試") String val1,
                       @Length(min = 2, max = 5, message = "測試") String val2) {
        return "OK";
    }

    //這是基於 bean 的驗證體系(@Validated,這個註解加上代表要驗證這個模型參數)
    @Mapping("bean")
    public String bean(@Validated ValidModel model) {
        return "OK";
    }
}

//申明可驗證的模型
@Data
public class ValidModel {
    @NotBlank(message = "手機號不能為空")
    private String mobile;

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

2、增加 solon.cache.spymemcached 分散式快取組件,提供 solon cache 的實現支援

配置:(Solon 的快取註解,默認是不需要配置快取服務的。默認會提供本地快取服務)

solon.app:
  name: demoapp
  group: demo
  
cache1:
  server: memcached.water.io:11211  #具體需要哪些配置,可以看下 MemCacheService 的類實現
  user: memcached

程式碼:

//組件配置
@Configuration
public class Config {
    @Bean
    public CacheService cache(@Inject("${cache1}") MemCacheService cache){
        return cache;
    }
}

//使用
@Controller
public class CacheController {
    /**
     * 執行結果快取10秒,並添加 test_${label} 和 test1 標籤
     * */
    @Cache(tags = "test_${label},test1" , seconds = 60)
    @Mapping("/cache/")
    public Date test(int label) {
        return new Date();
    }

    /**
     * 執行後,清除 標籤為 test  的快取(不過,目前沒有 test 的示簽...)
     * */
    @CachePut(tags = "test1")
    @Mapping("/cache/update")
    public Date update() {
        return new Date();
    }

    /**
     * 執行後,清除 標籤為 test_${label}  的快取
     * */
    @CacheRemove(tags = "test_${label}")
    @Mapping("/cache/remove")
    public String remove(int label) {
        return "清除成功-" + new Date();
    }
}

3、增加 solon.cache.jedis 分散式快取組件

使用同上

4、優化 solon.logging 內部結構,擴展更自由

例,配置一個新的日誌添加器,指定類名,指定級別:

solon.logging.appender:
  test:
    class: demo.TestAppender
    level: TRACE

定義日誌添加器:

public class TestAppender extends AppenderBase {
    @Override
    public void append(LogEvent logEvent) {
        System.out.println("[Test] " + logEvent.getContent());
    }
}

附:生態組件清單

Nami 插件(Solon rpc client) 說明
nami插件:: 說明
nami.coder.fastjson fastjson的編解碼適配
nami.coder.hessian hessian的編解碼適配
nami.coder.snack3 snack3的編解碼適配
nami.channel.http.okhttp okhttp的通道適配
nami.channel.socketd socketd的通道適配(適配後,可使用org.noear:solon.sockted.client.* 做為客戶端)
Solon 插件 說明
boot插件:: 說明
org.noear:solon.boot.jlhttp* boot插件,對jlhttp適配,提供http服務(不自帶session state)
org.noear:solon.boot.jetty* boot插件,對jetty適配,提供http服務(網友@khb提供)
org.noear:solon.extend.jetty.jsp 擴展插件,為jetty添加jsp支援(不建議使用jsp)(網友@khb提供)
org.noear:solon.boot.undertow* boot插件,對undertow適配,提供http服務(網友@tyk提供)
org.noear:solon.boot.websocket boot插件,對java-websocket適配,提供websocket服務
org.noear:solon.extend.undertow.jsp 擴展插件,為undertow添加jsp支援(不建議使用jsp)(網友@tyk提供)
靜態文件支援插件:: 說明
org.noear:solon.extend.staticfiles 擴展插件,添加靜態文件支援(監視 resources/static 文件夾)
切面支援插件:: 說明
org.noear:solon.extend.aspect 擴展插件,添加Dao、Service註解支援;進而支援事務和快取註解
數據操作支援插件:: 說明
org.noear:solon.extend.data 擴展插件,實現事務和快取的註解支援
驗證支援插件:: 說明
org.noear:solon.extend.validation 擴展插件,實現驗證的註解支援
Yaml配置支援插件:: 說明
org.noear:solon.extend.properties.yaml 擴展插件,添加yml配置文件支援
Data插件:: 說明
org.noear:solon.extend.data 擴展插件,添加事件(@Tran)、快取(@Cache)支援
Cloud插件:: 說明
org.noear:solon.cloud 擴展插件, 添加Solon Cloud 的介面定義及配置規範
Validation插件:: 說明
org.noear:solon.extend.validation 擴展插件,添加驗證(@Valid)支援
Cache插件:: 說明
org.noear:solon.cache.spymemcached 擴展插件,完成memcached的快取服務適配
org.noear:solon.solon.cache.jedis 擴展插件,完成redis的快取服務適配
jsr插件:: 說明
org.noear:solon.extend.jsr303 擴展插件,完成jsr303 bean 驗證支援
org.noear:solon.extend.jsr330 擴展插件,完成jsr330 組件與注入支援
跨域插件:: 說明
org.noear:solon.extend.cors 擴展插件,完成web跨域註解支援
Session插件:: 說明(可將boot插件的session state服務,自動換掉)
org.noear:solon.extend.sessionstate.jwt 擴展插件,分散式session(基於jwt構建)
org.noear:solon.extend.sessionstate.local 擴展插件,本地session
org.noear:solon.extend.sessionstate.redis 擴展插件,分散式session(其於redis構建)
日誌插件:: 說明
org.noear:solon.logging 擴展插件,添加日誌支援
org.noear:solon.logging.impl 擴展插件,添加Slf4j日誌支援
序列化插件:: 說明
org.noear:solon.serialization.fastjson* 序列化插件,對 fastjson 適配,提供json視圖輸出 或 序列化輸出
org.noear:solon.serialization.snack3* 序列化插件,對 snack3 適配,提供json視圖輸出 或 序列化輸出
org.noear:solon.serialization.hession* 序列化插件,對 hession 適配,提供 hession 序列化輸出
org.noear:solon.serialization.jackson 序列化插件,對 jackson 適配,提供json視圖輸出 或 序列化輸出
org.noear:solon.serialization.protostuff 序列化插件,對 protostuff 適配,提供protostuff視圖輸出 或 序列化輸出
視圖插件:: 說明(可置多個視圖插件)
org.noear:solon.view.freemarker* 視圖插件,對 freemarker 適配,提供html視圖輸出
org.noear:solon.view.jsp 視圖插件,對 jsp 適配,提供html視圖輸出
org.noear:solon.view.velocity 視圖插件,對 velocity 適配,提供html視圖輸出
org.noear:solon.view.thymeleaf 視圖插件,對 thymeleaf 適配,提供html視圖輸出
org.noear:solon.view.beetl 視圖插件,對 beetl 適配,提供html視圖輸出
org.noear:solon.view.enjoy 視圖插件,對 enjoy 適配,提供html視圖輸出
Solon SocketD 插件 說明
SocketD boot插件:: 說明
org.noear:solon.boot.socketd.jdksocket sockted boot插件,對jdksocket適配,提供socketd服務
org.noear:solon.boot.socketd.netty sockted boot插件,對netty適配,提供socketd服務
org.noear:solon.boot.socketd.rsocket sockted boot插件,對rsocket適配,提供socketd服務
org.noear:solon.boot.socketd.smartsocket sockted boot插件,對smart-socket適配,提供socketd服務
org.noear:solon.boot.socketd.websocket sockted boot插件,對websocket適配,提供socketd服務
SocketD client 插件:: 說明
org.noear:solon.sockted 擴展插件,sockted 協議的編解碼、會話等基礎支援
org.noear:solon.sockted.client.jdksocket 擴展插件,sockted 協議的 jdksocket 客戶端適配
org.noear:solon.sockted.client.netty 擴展插件,sockted 協議的 netty 客戶端適配
org.noear:solon.sockted.smartsocket 擴展插件,sockted 協議的 smartsocket 客戶端適配
org.noear:solon.sockted.websocket 擴展插件,sockted 協議的 websocket 客戶端適配
其它擴展插件 說明
org.noear:beetlsql-solon-plugin beetlsql 適配插件
org.noear:mybatis-solon-plugin mybatis 適配插件
org.noear:mybatis-sqlhelper-solon-plugin mybatis-sqlhelper 適配插件
org.noear:weed3-solon-plugin weed3 適配插件
org.noear:cron4j-solon-plugin cron4j 適配插件
org.noear:quartz-solon-plugin quartz 適配插件
org.noear:dubbo-solon-plugin dubbo 適配插件
org.noear:feign-solon-plugin feign 適配插件
org.noear:hasor-solon-plugin hasor 適配插件
org.noear:luffy-solon-plugin luffy 適配插件
org.noear:sureness-solon-plugin sureness 適配插件
org.noear:solon-springboot-starter springboot 適配插件
Solon Cloud 插件 說明
org.noear:consul-solon-plugin consul 適配插件(支援Solon cloud 配置服務、註冊與發現服務)
org.noear:nacos-solon-plugin nacos 適配插件(支援Solon cloud 配置服務、註冊與發現服務)
org.noear:zookeeper-solon-plugin zookeeper 適配插件(支援Solon cloud 配置服務、註冊與發現服務)
org.noear:water-solon-plugin water 適配插件(支援Solon cloud 配置、註冊與發現、事件、日誌、跟蹤、等服務)
org.noear:rabbitmq-solon-plugin rabbitmq 適配插件(支援Solon cloud 事件匯流排服務)
org.noear:rocketmq-solon-plugin rocketmq 適配插件(支援Solon cloud 事件匯流排服務)
org.noear:mqtt-solon-plugin mqtt 適配插件(支援Solon cloud 事件匯流排服務)
org.noear:kafka-solon-plugin kafka 適配插件(支援Solon cloud 事件匯流排服務)
org.noear:guava-solon-plugin guava 適配插件(支援Solon cloud 融斷服務)
org.noear:sentinel-solon-plugin sentinel 適配插件(支援Solon cloud 融斷服務)
org.noear:semaphore-solon-plugin semaphore 適配插件(支援Solon cloud 融斷服務)
org.noear:aliyun-oss-solon-plugin aliyun-oss 適配插件(支援Solon cloud 分散式文件服務)
org.noear:aws-s3-solon-plugin aws-s3 適配插件(支援Solon cloud 分散式文件服務)
org.noear:snowflake-id-solon-plugin snowflake 演算法適配插件(支援Solon cloud 分散式ID服務)

附:項目地址

附:入門示例