Solon 是一個微型的Java開發框架。強調,剋制 + 簡潔 + 開放的原則;力求,更小、更快、更自由的體驗。支援:RPC、REST API、MVC、Micro service、WebSocket、Socket 等多種開發模式。
Solon Cloud 是一系列的介面標準和配置規範,算是 Solon 的分散式開發套件方案。
快速瞭解Solon的材料:
《Solon 特性簡集,相較於 Springboot 有什麼區別?》
《Solon Cloud 分散式服務開發套件清單,感覺受與 Spring Cloud 的不同》
所謂更小:
核心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服務) |
附:專案地址
附:入門示例
- Solon 入門教程示例:https://gitee.com/noear/solon_demo
- Solon Rpc 入門教程示例:https://gitee.com/noear/solon_rpc_demo
- Solon Cloud 入門教程示例:https://gitee.com/noear/solon_cloud_demo
- Solon 進階教程示例:https://gitee.com/noear/solon_advance_demo