微型Java开发框架Solon 1.1发布,QPS达10万+

今日编程 2020-10-15 10:01:45 ⋅ 1619 阅读

简介

Solon 是一个微型的Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。

Solon 强调:克制+简洁+开放的原则;力求:更小、更快、更自由的体验。

所谓更小:

内核0.1m,最小web开发单位1m(相比Springboot项目包,小到可以乎略不计了)

所谓更快:

本机helloworld测试,qps达10万之多。

所谓更自由:
代码操控自由:

//可以容器自动

@XController
public class DemoController{
    @XInject("${db}")
    Map<String,String> db;
    @XInject
    UserService userService;
    @XMapping("/user/update")
    public void udpUser(UserModel user){
        userService.updateById(user);
    }
}

//可以按需手动
Map<String,String> db = XApp.cfg().getMap("db");
UserService userService = Aop.get(UserService.class);
XApp.global().post("/user/update", x-> userService.updateById(x.paramMap()));
框架选择自由:

可以用solon-web这样的快速开发集成包。也可以按项目需要选择不同的插件组装,比如:为非Solon项目添加solon.boot.jlhttp,0.1m即可让项目实现http+mvc支持。

此次重大版本发布,更新如下:

一、增加事务支持@XTran

@XController
public class DemoController{
    @Db
    BaseMapper<UserModel> userService;
    
    @XTran
    @XMapping("/user/update")
    public void udpUser(int user_id, UserModel user){
        userService.updateById(user);
    }
}

出于用户迁移成本考虑,@XTtran 事务策略与 Spring 的 @Transactional 基本一致。但增加了多数据源事务的友好支持。

二、增加缓存操控支持@XCache

@XController
public class DemoController{
    @Db
    BaseMapper<UserModel> userService;
    
    @XCacheRemove(tags = "user_${user_id}")
    @XMapping("/user/update")
    public void udpUser(int user_id, UserModel user){
        userService.updateById(user);
    }
    
    @XCache(tags = "user_${user_id}")
    public UserModel getUser(int user_id){
        return userService.selectById(user_id);
    }
}

缓存的处理参考了Weed3框架的缓存接口设计,基于Tag进行操控和管理,屏避了Key的麻烦(Key弄不好,可能会冲突)。

三、增加验证支持@XValid

@XValid  
@XController
public class DemoController {

    @NoRepeatSubmit
    @NotNull({"name", "icon", "mobile"})
    @XMapping("/valid")
    public String test(String name, String icon, @Pattern("13\\d{9}") String mobile) {
        return "OK";
    }

    @Whitelist
    @XMapping("/valid/test2")
    public String test2() {
        return "OK";
    }
}

@XValid会为控制器开启校验能力,其也可以作用在一个基类上。XValid的机制,是在Action执行之前对上下文进行较验。更多参考《Solon的校验框架使用、定制与扩展》

四、增加渲染的自我控制支持

//示例:定制统一输出控制基类

@XValid
public class UapiBase implements XRender {
    @Override
    public void render(Object obj, XContext ctx) throws Throwable {
        if (obj == null) {
            return;
        }

        if (obj instanceof String) {
            ctx.output((String) obj);
        } else {
            if (obj instanceof ONode) {
                ctx.outputAsJson(((ONode) obj).toJson());
            } else {
                if (obj instanceof UapiCode) {
                    //此处是重点,把一些特别的类型进行标准化转换
                    //
                    UapiCode err = (UapiCode) obj;
                    obj = XResult.failure(err.getCode(), UapiCodes.getDescription(err));
                }

                if (obj instanceof Throwable) {
                    //此处是重点,把异常进行标准化转换
                    //
                    Throwable err = (Throwable) obj;
                    obj = XResult.failure(err.getMessage());
                }

                ctx.outputAsJson(ONode.stringify(obj));
            }
        }
    }
}

//应用这个基类
//
@XController
public class DemoApi extends UapiBase {
    //此处的@NotEmpty验证,如果没通过会抛出UapiCode
    @NotEmpty({"type", "value"})
    @XMapping("/run/whitelist/check/")
    public String run(XContext ctx, String type, String value) throws Exception {
        String tags = ctx.param("tags", "");

        if (tags.contains("client")) {
            if (DbWaterCfgApi.whitelistIgnoreClient()) {
                return "OK";
            }
        }

        if (DbWaterCfgApi.isWhitelist(tags, type, value)) {
            return ("OK");
        } else {
            return (value + ",not is whitelist!");
        }
    }
}

五、增加Servlet Api亲和度

支持 ServletContainerInitializer 配置

public class DemoConfiguration implements ServletContainerInitializer{
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        //...
    }
}

支持 Servlet api 注解

@WebFilter("/demo/*")
public class DemoFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        res.getWriter().write("Hello,我把你过滤了");
    }
}

还有更多的细节打磨数不胜数,就不唠叨了。感谢某些人的一路支持。希望更多的人尝试Solon...


全部评论: 0

    我有话说:

    Quarkus 1.10.0.Final 发布Java 云原生、容器优先框架

    Quarkus 1.10.0.Final 现已发布。Quarkus 是 Kubernetes 原生的 Java 技术栈,它由同类中最佳的 Java 库和标准精制而成,并针对容器和云部署量身

    WebMIS 1.0.0 beta.3 发布,全栈开发基础框架

    全栈开发基础框架,包括 PHP / Python / SpringBoot / Phalcon / Flutter / NodeJS / Vue / Swoole / Redis / API 等技术

    Apache Ant 1.10.10 发布

    Apache Ant 1.10.10发布。Apache Ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发。 Apache Ant

    Fizz Gateway 1.1.1 发布,基于 Java异步框架WebFlux开发的微服务网关

    Fizz Gateway 是一个基于 Java异步框架WebFlux开发的微服务网关,能够实现热服务编排、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理等目的,拥有强大的自定义

    Python ORM框架SQLAlchemy 1.3.20 发布

    SQLAlchemy 1.3.20 发布了。SQLAlchemy 是一个 Python 的 SQL 工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久化模式,专门用于高效和高性能的数据库

    Apache Flink 1.12.1 发布,流处理框架

    Apache Flink 1.12 系列的首个 bug 修复版本 1.12.1 已经发布。该版本包含 79 个修复和优化,因此官方强烈建议所有用户都升级到 1.12.1。 Maven 依赖 <

    蚂蚁金服 Java RPC 开源框架—SOFARPC

    SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架

    开源资讯】JWCloud 专业版 v1.0.0 发布,基于 SpringCloud 研发的微服务框架

    简介 JavaWeb_Cloud 微服务平台是一款基于 SpringCloud 框架研发的分布式微服务框架,主要使用技术栈包括: SpringCloud、Vue、ElementUI

    Angular 11.1.0 正式发布,支持 TypeScript 4.1

    Angular 是一个基于 TypeScript 的开源前端框架,由 Google 的 Angular 团队以及社区共同领导。Angular 是由 AngularJS 的同一个开发团队完全重写而成的

    开源资讯】Electron 10.1.4 发布,跨平台桌面应用开发工具

    简介 Electron 是 GitHub 发布的跨平台桌面应用开发工具,支持 Web 技术开发桌面应用,其本身是基于 C++ 开发的,GUI 核心来自于 Chrome,而

    GitHub精选:2018年11月份最热门的Java开源项目

    又到了揭晓 11 月份最热门 Java 开源项目排名的时候了,在本月的名单中,出现了几个新面孔,如Java 核心知识库、轻量级容错组件Resilience4j .....

    Angular 11.1.0-next.2 发布,Web 前端框架

    Angular 11.1.0-next.2 现已发布,具体更新内容如下: Bug 修复 animations:在浏览器动画生成器中实现 getPosition compiler-cli

    Eclipse 4.19M1和 Equinox 2021-03 M1 现已发布

    Eclipse 4.19M1 和 Equinox 2021-03 M1 现已发布, Eclipse SDK 项目也包含在 4.19M1 版本中。此次更新涉及平台、Equinox、Java

    Java Web实战篇-轻松提高千级数据库查询效率

    通过优化数据库设计、java后台和数据库优化达到提高千级数据查询的效率。

    Quarkus 1.9.2.Final 发布Java 云原生、容器优先框架

    Quarkus 1.9.2.Final 现已发布。Quarkus 是 Kubernetes 原生的 Java 技术栈,它由同类中最佳的 Java 库和标准精制而成,并针对容器和云部署量身定

    Eclipse Jetty 9.4.38、10.0.111.0.1 发布

    Eclipse Jetty 9.4.38、10.0.111.0.1 已经发布。这三个版本都包含了大量的 bug 修复和改进,建议所有用户尽快升级。重要的是,这些版本涉及 CVE-2020

    GraalVM 21.1 社区版发布:实验性支持 Java 16

    GraalVM 21.1 稳定版已发布。GraalVM 是 Oracle 打造的高性能跨语言虚拟机,支持运行 JavaScript、Python 3、Ruby

    Apache Wicket 9.3.0 发布Java Web 开发框架

    Apache Wicket 9.3.0 现已发布。Wicket 是一个 Java 语言的 Web 开发框架,与 Struts、WebWork、Tapestry 相类似,其特点在于对