相對于 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
項目地址
- gitee:https://gitee.com/noear/solon
- github:https://github.com/noear/solon
- website: https://solon.noear.org