对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.8 发布

栏目: 软件资讯 · 发布时间: 4年前

内容简介:Solon 是一个轻量的Java基础开发框架。强调,克制 + 简洁 + 开放的原则;力求,更小、更快、更自由的体验。支持:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多种开发模式。短小而精悍! Solo...

Solon 是一个轻量的 Java 基础开发框架。强调,克制 + 简洁 + 开放的原则;力求,更小、更快、更自由的体验。支持:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多种开发模式。短小而精悍!

Solon Cloud 是一系列的接口标准和配置规范,算是 Solon 的分布式开发套件方案。

快速了解Solon的材料:

《Solon 特性简集,相较于 Springboot 有什么区别?》

《Solon Cloud 分布式服务开发套件清单,感觉受与 Spring Cloud 的不同》

《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.sessionstate.jwt,增加 prefix、allowAutoIssue、allowUseHeader 配置项

solon.extend.sessionstate.jwt 可以更简单的使用 JWT,像使用 sessionstate 一般。配置示例:

server.session:
  timeout: 7200 #单位秒;(可不配,默认:7200)
  state:
    jwt:
      name: TOKEN #变量名;(可不配,默认:TOKEN)
      secret: "E3F9N2kRDQf55pnJPnFoo5+ylKmZQ7AXmWeOVPKbEd8=" #密钥(使用 JwtUtils.createKey() 生成);(可不配,默认:xxx)
      prefix: Bearer #令牌前缀(可不配,默认:空)
      allowExpire: true #充许超时;(可不配,默认:true);false,则token一直有效
      allowAutoIssue: false #充许自动输出;(可不配,默认:true);flase,则不向header 或 cookie 设置值(由用户手动控制)
      allowUseHeader: false #充许使用Header传递;(可不配,默认:使用 Cookie 传递);true,则使用 header 传递

可以通过,JwtUtils.createKey() 生成密钥,例:

public class JwtTest {
    @Test
    public void test(){
        System.out.println(JwtUtils.createKey());
    }
}

应用示例:

@Mapping("api")
@Controller
public class API_test_login extends ApiBase {
    @Mapping("test.login")
    public String exec(Context ctx) {
        //设置session
        ctx.sessionSet("user_id", "12");
        ctx.sessionSet("name", "noear");

        //将session值,手动生成token并做为接口的结果输出
        return ctx.sessionState().sessionToken();
    }
}

2、插件 beetlsql-solon-plugin,升级 beetlsql 为 3.4.3(SQLManagerBuilder 增强了构建能力)

这个更新,主要是增加 beetlsql 的 SQLManagerBuilder 能力。

EventBus.subscribe(SQLManagerBuilder.class, e->{
    e.setDbStyle(new OracleStyle());
    //e.addIdAutoGen();
});

3、插件 httputils-solon-plugin,添加 PreheatUtils 接口预热小工具

PreheatUtils 是一个方便请求自己接口的小工具,便于在程序内部编写预热代码。

public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args);

        //请求自己的接口进行预热
        PreheatUtils.preheat("/cfg/get/?tag=water");
        PreheatUtils.preheat("/cfg/set/", h -> h.data("value", "test").post());
    }
}

4、添加 SolonProps::loadEnv 加载环境变量接口

使用 Docker 或 K8s 部署时,容器可以添加环境配置。为了方便,提供了loadEnv接口,从而使用环境变量如果属性变量。

public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args, app->{
            //加载环境变量(如果有则加载并替换profile的值)
            app.cfg().loadEnv("water.");
            
            //通过属性能力,获取链接池实例
            HikariDataSource ds =app.cfg().getBean("water.ds.",HikariDataSource.class);
        });
        
        //
        // 此代码的效果:1.本地可配置profile; 2.容器部署时可通过环境变量修改
        //
    }
}

5、添加 SolonApp::signalGet 获取信号接口

这个功能用处好像不大。。。但可以做些日志。

public class DemoApp {
    public static void main(String[] args) {
        SolonApp app = Solon.start(DemoApp.class, args);
        
        //获取18080的端口信号信息,并打印
        Signal signal = app.signalGet(18080);
        System.out.println(signal);
    }
}

6、solon.cloud CloudJob 增加 cron7x 可选属性

@CloudJob(name = "DemoJob", cron7x = "0 * * * * ?")
public class DemoJob implements CloudJobHandler {
    static final Logger log = LoggerFactory.getLogger(DemoJob.class);

    @Override
    public void handle(Context ctx) throws Throwable {
        log.info("JobHandlerDemo1");
    }
}

//或者

@CloudJob(name = "DemoJob", cron7x = "1m")
public class DemoJob implements CloudJobHandler {
    static final Logger log = LoggerFactory.getLogger(DemoJob.class);

    @Override
    public void handle(Context ctx) throws Throwable {
        log.info("JobHandlerDemo1");
    }
}

7、solon.validation 增加更多注释

8、插件 mybatis-solon-plugin 升级 mybatis 为 3.5.7

9、插件 solon.serialization.protostuff 升级 protostuff 为 1.7.4

10、插件 solon.socketd.client.smartsocket 升级 smartsocket 1.5.10

11、插件 solon.serialization.hession 升级 hessian 4.0.65

12、插件 solon.auth AuthUtil 验证权限与角色前增加登录验证

13、增加 qiniu-kodo-solon-plugin 对象存储适配插件

附:入门示例


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed Shaw / Example Product Manufacturer / 2011

This is a very beginner book for people who want to learn to code. If you can already code then the book will probably drive you insane. It's intended for people who have no coding chops to build up t......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具