关于官网

千呼万唤始出来: 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. [ Skill ] 图形化组件在注册 User Trigger 时需要注意的事情

    https://www.cnblogs.com/yeungchie/ 使用 deRegUserTriggers 可以用来配置:当打开一个新窗口时,自动集成自定义的菜单.工具栏等等. 使用格式如下: d ...

  2. 【CTSC1999】【带权并查集 】月亮之眼

    Description 吉儿是一家古董店的老板娘,由于她经营有道,小店开得红红火火.昨天,吉儿无意之中得到了散落民间几百年的珍宝-月亮之眼.吉儿深知"月亮之眼"价值连城:它是由许多 ...

  3. [Ocean Modelling for Begineers] Ch5. 2D Shallow-Water Modelling

    本章利用二维浅水模型研究表面重力波的不同物理过程,如湖水中风驱动流体,正压不稳定机制(?the barotropic instability mechanism).本章将为读者介绍使用不同的对流格式模 ...

  4. WSL + MobaXterm 取代虚拟机

    windows子系统安装默认C盘,这里我们直接下载安装文件安装在我们指定的目录. 1.先去官方网站下载安装文件:https://docs.microsoft.com/zh-cn/windows/wsl ...

  5. R语言与医学统计图形-【24】ggplot位置调整函数

    ggplot2绘图系统--位置调整函数 可以参数position来调整,也有专门的函数position_*系列来设置. 位置函数汇总: 1.排列 并排排列 mean <- runif(12,1, ...

  6. shell命令行——快捷键

    生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向) ...

  7. 在VS2008环境下编写C语言DLL,并在C++和C#项目下调用 (转载)

    1.编写DLL a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击"下一步", 应用程序类型选择:"DLL(D)",附加选项: ...

  8. Git五个常见问题及解决方法

    一.删除远程仓库上被忽略的文件 由于种种原因,一些本应该被忽略的文件被我们误操作提交到了远程仓库了.那么我们该怎么删除这些文件呢? 以误提交了.idea目录为例,我们可以通过下面的步骤处理: 1)我们 ...

  9. 『学了就忘』Linux文件系统管理 — 64、磁盘配额的配置步骤

    目录 1.手工建立一个5GB的分区 2.建立需要做限制的三个用户 3.在分区上开启磁盘配额功能 4.建立磁盘配额的配置文件 5.开始设置用户和组的配额限制 6.启动和关闭配额 7.磁盘配额的查询 8. ...

  10. springcloud报Load balancer does not have available server for client: PROVIDER-SERVER

    1.后台报错截图 这个的意思就是:负载均衡服务器中没有这个我自定义的PROVIDER-SERVER.开始我以为是Ribbon的原因,所以去折腾了一下,但是:最后不断往前推到之后发现本质是:在注册中心E ...