• Solon 1.7 重要发布,更现代感的应用开发框架


    相对于 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

    项目地址

  • 相关阅读:
    【Java基础面试三十七】、说一说Java的异常机制
    Linux部署Jmeter
    axios基本用法、axios如何发起网络请求?如何二次封装axios?
    PMP_模考三 180题(附答案及解析)
    树状数组笔记
    结合双向LSTM和注意力机制的DQN-CE算法船舶能量调度
    MySQL——简单认识一下索引吧(index)
    VBA技术资料MF70:从单元格文本中取消或删除上标
    C#连接MySql数据库详细步骤
    Ansible自动化运维工具(三)
  • 原文地址:https://www.cnblogs.com/noear/p/16193271.html