关于官网

千呼万唤始出来: https://solon.noear.org 。整了一个月多了,总体样子有了。。。还得不断接着整!

关于 Solon

Solon 是一个轻量级应用开发框架。支持 Web、Data、Job、Remoting、Cloud 等任何开发场景。短小而精悍!

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

关于 Solon Cloud

Solon Cloud 定义了一系列分布式开发的接口标准和配置规范,相当于DDD模式里的防腐层概念。是 Solon 的微服务架构模式开发解决方案。

关于本次更新

1、增加了第三方日志框架的适配。以往是直接使用日志框架,亲合度差了一些

  • 新增 log4j2-solon-plugin 插件
  • 新增 logback-solon-plugin 插件

之前只适配了分布式日志服务。现在也有本地的了。且,统一的配置方式(默认可以0配置):

solon.app:
name: demoapp # 以下为默认值,可以都不加,或者想改哪行加哪行(支持"云端配置服务"进行配置,支持写到"云端日志服务")
solon.logging.appender:
console:
level: TRACE
pattern: "%highlight(%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [-%t][*%X{traceId}]%tags[%logger{20}]:) %n%msg%n"
file:
name: "logs/${solon.app.name}"
level: INFO
pattern: "%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [-%t][*%X{traceId}]%tags[%logger{20}]: %n%msg%n"
cloud:
level: INFO # 记录器级别的配置示例
solon.logging.logger:
"features.*":
level: WARN
"org.jetty.demo.*":
level: WARN

并以 slf4j 做为统一的记录界面

@Slf4j
@Service
public class DemoService{
public void hello(){
log.info("Hello world!");
}
}

2、增加了一些便利接口和使用方式

  • 增加 Context::sessionAsInt, Context::sessionAsLong, Context::sessionAsDouble 接口
  • 增加 Context::sessionRemove 接口
  • 修复 solon.extend.stop 用户ip获取错误
  • 增加 mybatisplus-solon-plugin 为 globalConfig 注入内容的入口
  • 集成包 solon-api 默认添加 solon.extend.cors 插件
  • 增加 主体流注入支持(@Body InputStream body)
  • 取消 solon.cache 插件,由 solon.data 插件集成相关功能,并提供工厂扩展机制
  • 增加 上下文特性,自动做为模板变量
  • 增加 JsonRenderFactory 的事件扩展支持
  • 增加 模板引擎配置 事件扩展机制

综合一些特性,做个简单的组合演示

public class DemoApp{
public static void main(String[] args){
Solon.start(DemoApp.class, args, app->{
//增加默认的跨域支持(支持它的插件,现在默认集成到了 solon-api 集成包里)
app.before(new CrossHandler().exposedHeaders("sign,token")); //定制渲染工厂(现在,不管哪个Json 框架都可基于 JsonRenderFactory 进行统一的定制)
app.onEvent(JsonRenderFactory.class, f->{
//json渲染时,将 long 型统一转为 string
f.addConvertor(Long.class, v-> String.valueOf(v));
}); //定制ftl模板配置
app.onEvent(freemarker.template.Configuration.class, c -> {
//增加经典模式支持
c.setSetting("classic_compatible", "true");
c.setSetting("number_format", "0.##");
});
});
}
} @Configuration
public class DemoConfig {
//通过供应商模式,自动构建不同的缓存服务类型(从原来的 solon.cache 转移到 solon.data 插件)
@Bean
public CacheService cache1(@Inject("cache1") CacheServiceSupplier supplier) {
return supplier.get();
}
} @Controller
public class DemoController{
@Mapping("/login")
public void login(Context ctx){
//到登录页时,把 user_id 删掉;确保用户重新登录
ctx.sessionRemove("user_id");
} @Mapping("/admin")
public void admin(Context ctx){
long userId = ctx.sessionAsLong("user_id");
if(userId == 0){
//如果用户id为0,则302跳转到登录面
ctx.redirect("/login");
}
} @Mapping("/admin/group/edit.save")
public void admin_group_edit_save(long groupId, String name, @Body String meta){
//groupId, name 通过 queryString 传入;meta 是通过 body 传入的纯文本
}
} @Component
public class DemoFilter implements Filter{
@Override
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
//给所有模板增加全局变量(或公共变量)
ctx.attrSet("js", "/_static/js");
ctx.attrSet("css", "/_static/css"); chain.doFilter(ctx);
}
}

3、能力或兼容性增强

  • 增加 @Init 私有函数支持
  • 增加 @Bean 私有函数支持
  • 增加 @Inject("${xxx:}"),默认值为空的支持
  • 增加 StringSerializerRender 对 renderAndReturn 的支持
  • 增加 Context::renderAndReturn 支持非视图数据
  • 调整 EventListener 充许 onEvent 抛出异常
  • 调整 初始化失败时,自动停掉所有插件并结束进程
  • 增加 上下文特性,自动做为模板变量
  • 优化 配置注入"${xxx:def}"的兼容性,def有":"符也没关系了
  • 增加 Mvc 数组参数注入时,自动以,号分离为数组
  • 增加 @Init::index 属性
  • 增加 容器扫描去重去处
  • 取消 @Param::format 属性(自动处理增加17种格式)
@Configuration
public class DemoConfig {
//以前必须要用 public
@Bean
private CacheService cache1(@Inject("cache1") CacheServiceSupplier supplier) {
return supplier.get();
} @Init
private void init(){
//...
}
} @Controller
public class DemoController{ //以前是不能在默认值里出现:号的
@Inject("${user.name:noear:org}")
String userName; @Mapping("/test")
public String test(Context ctx){
UserModel user = userService.get(1); //现在可以借助上下文的渲染函数进行序列化(默认是json,也可指定渲染器)
ctx.attrSet("@render","@json");
String json = ctx.renderAndReturn(user); return Base64Utils.encode(json);
}
}

快速了解 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);

附:项目地址

附:入门示例

更多系统的学习内容,建议参考官网

Solon 1.6.10 重要发布,现在有官网喽!的更多相关文章

  1. 把包发布到npm官网

    一.包 包就是多模块的集合,CommonJS的包规范给程序员提供了组织模块的标准,减少沟通成本. 规范: 所有的模块放在demo文件夹下(包名)的lib文件夹里面 在lib文件夹的同级目录下新建ind ...

  2. Solon,一个轻量级的应用开发框架。发布官网喽!!!

    官网发布: https://solon.noear.org/ 项目简介: Solon,是一个轻量级的应用开发框架.更快.更小.更自由! 支持JDK8+:主框架0.1Mb:组合不同的插件应对不同需求:方 ...

  3. Angular2发布思路(整理官网Deployment页面)

    本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地 ...

  4. MyEclipse 10.7.1 最新版官网下载地址

    MyEclipse 10.7.1(Windows): http://downloads.myeclipseide.com/downloads/products/eworkbench/indigo/in ...

  5. Nginx 1.10.2 发布,高性能 Web 服务器

    Nginx 1.10.2 发布了.Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器 更新内容: Changes with n ...

  6. ArcGIS Server 10.1发布GP服务

    ArcGIS Server 10.1发布GP服务 ArcGIS Server 10.1发布GP服务确实更简单了,只是刚使用不怎么习惯.ArcGIS Server 10.1发布GP服务需要先在ArcCa ...

  7. [转帖]AIDA64 6.10版发布:全面支持中国兆芯、海光x86 CPU

    AIDA64 6.10版发布:全面支持中国兆芯.海光x86 CPU https://www.cnbeta.com/articles/soft/892877.htm 支持国产x86了 作为硬件识别工具领 ...

  8. Python 3.10 明年发布,看看都有哪些新特性?

    我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4.Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b ...

  9. [ArcGIS所需的补丁]ArcGIS 10.2.2 for Desktop联系Oracle(2014年10上个月发布)数据库崩溃

    环境的叙述性说明: ArcGIS 10.2.2 for Desktop.Oracle12.1.0.2 RAC 这仅仅是用户当时环境描写叙述.可是导致该问题的解决办法还包含很多其它的环境! 问题描写叙述 ...

随机推荐

  1. DPC++中的现代C++语言特性

    Ⅰ DPC++简介 DPC++是Data Parallel C++(数据并行C++)的首字母缩写,它是Intel为了将SYCL引入LLVM和oneAPI所开发的开源项目.SYCL是为了提高各种加速设备 ...

  2. Boussinesq 近似及静压假定,内外模分离方法(附录A)

    0.Formulation of the RANS equations [1] 不可压缩流体控制方程 \[\begin{array}{l l} \frac{\partial u}{\partial x ...

  3. Linux运维工程师面试题整理

    1. Nginx 反向代理,负载均衡,动静分离,工作原理及优化nginx配置反向代理. vim Nginx.confServer模块中配置Listen 80Server_name ip;在server ...

  4. perl 数组快速去除重复元素

    这里记录两种perl数组去重的办法,一种利用哈希(hash),一种直接利用perl自带的模块List::MoreUtils内部的函数uniq. 一.利用hash去重 示例代码如下: 1 #!/usr/ ...

  5. Kafka入门教程(一)

    转自:https://blog.csdn.net/yuan_xw/article/details/51210954 1 Kafka入门教程 1.1 消息队列(Message Queue) Messag ...

  6. 大数据学习day24-------spark07-----1. sortBy是Transformation算子,为什么会触发Action 2. SparkSQL 3. DataFrame的创建 4. DSL风格API语法 5 两种风格(SQL、DSL)计算workcount案例

    1. sortBy是Transformation算子,为什么会触发Action sortBy需要对数据进行全局排序,其需要用到RangePartitioner,而在创建RangePartitioner ...

  7. nodejs-Child Process模块

    JavaScript 标准参考教程(alpha) 草稿二:Node.js Child Process模块 GitHub TOP Child Process模块 来自<JavaScript 标准参 ...

  8. STM32一些特殊引脚做IO使用的注意事项

    1 PC13.PC14.PC15的使用 这三个引脚与RTC复用,<STM32参考手册>中这样描述: PC13 PC14 PC15需要将VBAT与VDD连接,实测采用以下程序驱动4个74HC ...

  9. 3.5 Rust Generic Types, Traits, and Lifetimes

    Every programming language has tools for effectively handling the duplication of concepts. In Rust, ...

  10. LINUX 系统性能检测工具vmstat

    vmstat 有2个参数,第一个是采样时间间隔(单位是s),第二个参数是采样个数. #表示 2s采样一次,一共采样2次 vmstat 2 2 也可以只写第一个参数,让系统一直采样直到停止(ctrl + ...