Solon 1.6.10 重要发布,现在有官网喽!
关于官网
千呼万唤始出来: 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🇲🇲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🇲🇲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 的不同》
所谓更小:
内核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 入门教程示例:https://gitee.com/noear/solon_demo
- Solon Api 入门教程示例:https://gitee.com/noear/solon_api_demo
- Solon Rpc 入门教程示例:https://gitee.com/noear/solon_rpc_demo
- Solon Auth 入门教程示例:https://gitee.com/noear/solon_auth_demo
- Solon Cloud 入门教程示例:https://gitee.com/noear/solon_cloud_demo
- Solon Socketd 入门教程示例:https://gitee.com/noear/solon_socketd_demo
- Solon 进阶教程示例:https://gitee.com/noear/solon_advance_demo
更多系统的学习内容,建议参考官网
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring核心原理之IoC容器初体验(2)
本文节选自《Spring 5核心原理》 1 IoC与DI基本概念 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来帮忙实现。我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象与对象的关系。这个描述最具体的表现就是我们所看到的配置文件。 DI(Dependency Injection,依赖注入)就是指对象被动接受依赖类而不自己主动去找,换句话说,就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它依赖的类注入给它。 我们先从自己设计的视角来考虑。 (1)对象与对象的关系怎么表示? 可以用XML、properties等语义化配置文件表示。 (2)描述对象关系的文件存放在哪里? 可能是classpath、filesystem或者URL网络资源、servletContext等。 (3)不同的配置文件对对象的描述不一样,如标准的、自定义声明式的,如何统一? 在内部需要有一个统一的关于对象的定义,所有外部的描述都必须转化成统一的描述定义。 (4)如何对不同的配置文件进行解析? 需要对不同的配置文件语法采用...
- 下一篇
WeCube 3.2.2 发布,一站式 IT 架构管理和运维管理工具
WeCube 简介 微众银行在分布式架构实践的过程中,发现将银行核心系统构建于分布式架构之上,会遇到一些与传统单体应用不同的痛点(例如,服务器增多,部署难度大;调用链长,全链路跟踪困难; 系统复杂,问题定位时间长等),在逐步解决这些痛点的过程中,总结了一套IT管理的方法论和最佳实践,并研发了与之配套的IT管理工具体系。 WeCube就是将该套方法论和最佳实践,从微众内部众多IT管理工具体系中提炼出来,整合成一套开箱即用的、开源的、一站式IT架构管理和运维管理工具,主要用于简化分布式架构IT管理,并可以通过插件进行功能扩展。 此次版本更新主要功能和优化点如下。 Features: Monitor Plugin – 全新业务监控管理。 Enhancements: WeCube Platform - 支持插件s3文件声明; WeCube Platform - 支持私钥登陆; WeCube Platform - 增加数据写入任务节点; WeCube Platform - 优化新插件注册事务保证; WeCMDB Plugin – 数据权限配置编辑回显问题; WeCMDB Plugin – 数据权...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装