Solon 框架,单月下载量超100万了!!!

Posted 带刺的坐椅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solon 框架,单月下载量超100万了!!!相关的知识,希望对你有一定的参考价值。

Java 新的生态型应用开发框架:更快、更小、更简单。 启动快 5 ~ 10 倍;qps 高 2~ 3 倍;运行时内存节省 1/3 ~ 1/2;打包可以缩到 1/2 ~ 1/10;同时支持 jdk8, jdk11, jdk17, jdk20。

Solon 框架,于2023年的四月份突冲100万下载量了。感谢开源的力量,我们同喜同荣!!!Solon 目前,是“可信开源共同体”的新成员,积极参与中科院的“开源之夏”,是某军工服务商的力推框架,有海外的用户,有互联网用户,有区块链用户,有大厂用户,也是很多信创用户的优选,等等...

偶尔还会有人问,你有企业用户了吗?这是大前年的问题了。希望可以跳过:)

Solon 是个啥?

它是 Java 新的生态型应用开发框架(对标 Spring 生态,这样好理解一些)。它从零开始构建,有自己的标准规范与开放生态。它解决了一个重要的痛点:启动慢,费资源。

对标 Spinrg 生态?

对标不是找人打架,而是让大家方便理解这是什么样的新东西。

全球有很多的 Java 应用开发框架。就独立生态而言, Solon 可能是全球第二级别的(第一自然是 Spring)。Solon 目前有 150 多个生态插件,可覆盖各种常见的领域开发。

解决痛点?

Solon 不会因为扩展依赖变多而启动很慢(开发调试时,爽快)!!!这应该与 Solon Bean 容器的独特设计有关。以“小诺项目”为例 “snowy-spring 版” 启动 30-50秒,“snowy-solon 版” 启动3-5秒。(有兴趣的,可以拉取代码验证下)

以前有几个句这么说的:“时间就是金钱,效率就是生命”,“天下武功,唯快不败”。

相对于 Spring Boot 和 Spring Cloud 的项目:

  • 启动快 5 ~ 10 倍。 (更快)
  • qps 高 2~ 3 倍。 (更高)
  • 运行时内存节省 1/3 ~ 1/2。 (更少)
  • 打包可以缩小到 1/2 ~ 1/10;比如,300Mb 的变成了 23Mb。 (更小)
  • 同时支持 jdk8, jdk11, jdk17, jdk20, (以及 Graalvm Native)

项目仓库:

附:

Solon 架构图:

Solon Cloud 架构图:

一个小而美Java开发框架Solon 1.1发布,QPS达10万+

简介

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...


以上是关于Solon 框架,单月下载量超100万了!!!的主要内容,如果未能解决你的问题,请参考以下文章

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

Solon v2.2.12 发布,Java 应用开发框架

一个小而美Java开发框架Solon 1.1发布,QPS达10万+

Solon 的过滤器 Filter 和两种拦截器 Handler Interceptor

天下苦 Spring 久矣,Solon v2.2.20 发布

Solon 生态插件清单