相对于 Spring Boot 和 Spring Cloud 的项目

  • 启动快 5 ~ 10 倍
  • qps 高 2~ 3 倍
  • 运行时内存节省 1/3 ~ 1/2
  • 打包可以缩小到 1/2 ~ 1/10(比如,90Mb 的变成了 9Mb)

关于 Solon

Solon 是一个更现代感的应用开发框架,轻量、开放生态型的。支持 Web、Data、Job、Remoting、Cloud 等任何开发场景。

  • 强调,克制 + 简洁 + 开放 + 生态的原则
  • 力求,更小、更少、更快、更自由的体验

目前有近130个生态插件,含盖了日常开发的各种需求。

本次主要更新内容

  • 新增 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 国际化接口规范
@Configuration
public class DemoConfig {
@Bean
public I18nBundleFactory i18nBundleFactory(){
//将国际化服务,切换为云端接口
return new CloudI18nBundleFactory();
}
}
  • 添加 SessionStateBase 提供会话状护的基础能力支持
  • 添加 CloudBreakerService /root 配置支持(可支持动态创建)
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"
#设定会话超时秒数(单位:秒)
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

项目地址

Solon 1.7 重要发布,更现代感的应用开发框架的更多相关文章

  1. Solon 1.6.30 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  2. Solon 1.6.33 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  3. Solon 1.6.36 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  4. Solon 1.7.6 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  5. Solon 1.5.29 发布,轻量级 Java 基础开发框架

    本次版本主要变化: 增加 captcha-solon-plugin 插件(提供滑块验证与选文字验证能力) 插件 sa-token-solon-plugin,升级 sa-token 为 1.26.0 插 ...

  6. Solon 1.8.0 发布,云原生微服务开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  7. Solon 1.8.3 发布,云原生微服务开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  8. Spring Boot & Cloud 轻量替代框架 Solon 1.4.1 发布

    Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...

  9. Java 超新星开源项目 Solon v1.10.10 发布

    一个更现代感的 Java 应用开发框架:更快.更小.更自由.主框架仅 0.1 MB.Helloworld: @Controller public class App { public static v ...

随机推荐

  1. 什么是 Hystrix 断路器?我们需要它吗?

    由于某些原因,employee-consumer 公开服务会引发异常.在这种情况下使用Hystrix 我们定义了一个回退方法.如果在公开服务中发生异常,则回退方法返回一些默认值. 如果 firstPag ...

  2. Docker配置PostgreSQL数据本地持久化

    卷的原理图: 主机中的本地目录作为Docker容器内的持久存储卷装载,以便在主机和Docker容器之间共享数据.如果主机希望访问或定期备份在Docker容器内运行的DB服务器写入文件夹的数据或数据库, ...

  3. PRODUCER配置加载

    1.入口 Kafka通过new一个KafkaProducer将配置项进行加载.将用户定义的properties作为参数,构造成一个ProducerConfig对象. public KafkaProdu ...

  4. 什么是 Spring 的依赖注入?

    依赖注入,是 IOC 的一个方面,是个通常的概念,它有多种解释.这概念是说你 不用创建对象,而只需要描述它如何被创建.你不在代码里直接组装你的组件和 服务,但是要在配置文件里描述哪些组件需要哪些服务, ...

  5. Java 死锁以及如何避免?

    Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况 出现至少两个线程和两个或更多资源. Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请.

  6. nginx 负载均衡详解

    配置文件 upstream abc { server 192.168.2.188:8080 weight=1 max_fails=3 fail_timeout=30; 定义集群,weight=权重轮询 ...

  7. 学习RabbitMQ(四)

      I. 消息中间件特点: 1,异步处理模式 消息发送者可以发送一个消息而无需等待响应,消息发送者将消息发送到一条虚拟的通道或队列上,消息接收者则订阅或监听该通道,一条消息可能最终转发给一个或多个消息 ...

  8. 数据仓库(5)数仓Kimball与Inmon架构的对比

    数据仓库主要有四种架构,Kimball的DW/BI架构.独立数据集市架构.辐射状企业信息工厂Inmon架构.混合Inmon与Kimball架构.不过不管是那种架构,基本上都会使用到维度建模. < ...

  9. C语言 | 栈区空间初探

    栈的定义 栈(stack)又名堆栈,堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的 .对这个存储区存入的数据,是一种特殊的数据结构.所有的数据存入或取出,只能在浮动的一端(称栈顶)进 ...

  10. Numpy中数组的乘法

    Numpy中数组的乘法 按照两个相乘数组A和B的维度不同,分为以下乘法: 数字与一维/二维数组相乘: 一维数组与一维数组相乘: 二维数组与一维数组相乘: 二维数组与二维数组相乘: numpy有以下乘法 ...