Spring Boot & Cloud 轻量替代框架 Solon 1.3.37 发布
Solon 是一个微型的Java开发框架。强调,克制 + 简洁 + 开放的原则;力求,更小、更快、更自由的体验。支持:RPC、REST API、MVC、Micro service、WebSocket、Socket 等多种开发模式。
Solon Cloud 是一系列的接口标准和配置规范,算是 Solon 的分布式开发套件方案。
快速了解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);
本次版本主要变化:
1、增加 solon.extend.jsr303 组件,支持 jsr303 bean验证能力
Solon 原有的验证体系是基于 Context 的,基于方法或参数的验证。现在算是补齐了 Bean 或 Model 的验证能力。
@Valid
@Controller
public class ValidController {
//这是基于 context 的验证体系(可以批量验证参数)
@NotZero({"val1", "val2"})
@Mapping("nzero")
public String nzero(int val1, int val2) {
return "OK";
}
//这也是基于 context 的验证体系
@Mapping("size")
public String size(@Length(min = 2, max = 5, message = "测试") String val1,
@Length(min = 2, max = 5, message = "测试") String val2) {
return "OK";
}
//这是基于 bean 的验证体系(@Validated,这个注解加上代表要验证这个模型参数)
@Mapping("bean")
public String bean(@Validated ValidModel model) {
return "OK";
}
}
//申明可验证的模型
@Data
public class ValidModel {
@NotBlank(message = "手机号不能为空")
private String mobile;
@NotBlank(message = "密码不能为空")
private String password;
}
2、增加 solon.cache.spymemcached 分布式缓存组件,提供 solon cache 的实现支持
配置:(Solon 的缓存注解,默认是不需要配置缓存服务的。默认会提供本地缓存服务)
solon.app:
name: demoapp
group: demo
cache1:
server: memcached.water.io:11211 #具体需要哪些配置,可以看下 MemCacheService 的类实现
user: memcached
代码:
//组件配置
@Configuration
public class Config {
@Bean
public CacheService cache(@Inject("${cache1}") MemCacheService cache){
return cache;
}
}
//使用
@Controller
public class CacheController {
/**
* 执行结果缓存10秒,并添加 test_${label} 和 test1 标签
* */
@Cache(tags = "test_${label},test1" , seconds = 60)
@Mapping("/cache/")
public Date test(int label) {
return new Date();
}
/**
* 执行后,清除 标签为 test 的缓存(不过,目前没有 test 的示签...)
* */
@CachePut(tags = "test1")
@Mapping("/cache/update")
public Date update() {
return new Date();
}
/**
* 执行后,清除 标签为 test_${label} 的缓存
* */
@CacheRemove(tags = "test_${label}")
@Mapping("/cache/remove")
public String remove(int label) {
return "清除成功-" + new Date();
}
}
3、增加 solon.cache.jedis 分布式缓存组件
使用同上
4、优化 solon.logging 内部结构,扩展更自由
例,配置一个新的日志添加器,指定类名,指定级别:
solon.logging.appender:
test:
class: demo.TestAppender
level: TRACE
定义日志添加器:
public class TestAppender extends AppenderBase {
@Override
public void append(LogEvent logEvent) {
System.out.println("[Test] " + logEvent.getContent());
}
}
附:生态组件清单
| Nami 插件(Solon rpc client) | 说明 |
|---|---|
| nami插件:: | 说明 |
| nami.coder.fastjson | 对fastjson的编解码适配 |
| nami.coder.hessian | 对hessian的编解码适配 |
| nami.coder.snack3 | 对snack3的编解码适配 |
| nami.channel.http.okhttp | 对okhttp的通道适配 |
| nami.channel.socketd | 对socketd的通道适配(适配后,可使用org.noear:solon.sockted.client.* 做为客户端) |
| Solon 插件 | 说明 |
|---|---|
| boot插件:: | 说明 |
| org.noear:solon.boot.jlhttp* | boot插件,对jlhttp适配,提供http服务(不自带session state) |
| org.noear:solon.boot.jetty* | boot插件,对jetty适配,提供http服务(网友@khb提供) |
| org.noear:solon.extend.jetty.jsp | 扩展插件,为jetty添加jsp支持(不建议使用jsp)(网友@khb提供) |
| org.noear:solon.boot.undertow* | boot插件,对undertow适配,提供http服务(网友@tyk提供) |
| org.noear:solon.boot.websocket | boot插件,对java-websocket适配,提供websocket服务 |
| org.noear:solon.extend.undertow.jsp | 扩展插件,为undertow添加jsp支持(不建议使用jsp)(网友@tyk提供) |
| 静态文件支持插件:: | 说明 |
| org.noear:solon.extend.staticfiles | 扩展插件,添加静态文件支持(监视 resources/static 文件夹) |
| 切面支持插件:: | 说明 |
| org.noear:solon.extend.aspect | 扩展插件,添加Dao、Service注解支持;进而支持事务和缓存注解 |
| 数据操作支持插件:: | 说明 |
| org.noear:solon.extend.data | 扩展插件,实现事务和缓存的注解支持 |
| 验证支持插件:: | 说明 |
| org.noear:solon.extend.validation | 扩展插件,实现验证的注解支持 |
| Yaml配置支持插件:: | 说明 |
| org.noear:solon.extend.properties.yaml | 扩展插件,添加yml配置文件支持 |
| Data插件:: | 说明 |
| org.noear:solon.extend.data | 扩展插件,添加事件(@Tran)、缓存(@Cache)支持 |
| Cloud插件:: | 说明 |
| org.noear:solon.cloud | 扩展插件, 添加Solon Cloud 的接口定义及配置规范 |
| Validation插件:: | 说明 |
| org.noear:solon.extend.validation | 扩展插件,添加验证(@Valid)支持 |
| Cache插件:: | 说明 |
| org.noear:solon.cache.spymemcached | 扩展插件,完成memcached的缓存服务适配 |
| org.noear:solon.solon.cache.jedis | 扩展插件,完成redis的缓存服务适配 |
| jsr插件:: | 说明 |
| org.noear:solon.extend.jsr303 | 扩展插件,完成jsr303 bean 验证支持 |
| org.noear:solon.extend.jsr330 | 扩展插件,完成jsr330 组件与注入支持 |
| 跨域插件:: | 说明 |
| org.noear:solon.extend.cors | 扩展插件,完成web跨域注解支持 |
| Session插件:: | 说明(可将boot插件的session state服务,自动换掉) |
| org.noear:solon.extend.sessionstate.jwt | 扩展插件,分布式session(基于jwt构建) |
| org.noear:solon.extend.sessionstate.local | 扩展插件,本地session |
| org.noear:solon.extend.sessionstate.redis | 扩展插件,分布式session(其于redis构建) |
| 日志插件:: | 说明 |
| org.noear:solon.logging | 扩展插件,添加日志支持 |
| org.noear:solon.logging.impl | 扩展插件,添加Slf4j日志支持 |
| 序列化插件:: | 说明 |
| org.noear:solon.serialization.fastjson* | 序列化插件,对 fastjson 适配,提供json视图输出 或 序列化输出 |
| org.noear:solon.serialization.snack3* | 序列化插件,对 snack3 适配,提供json视图输出 或 序列化输出 |
| org.noear:solon.serialization.hession* | 序列化插件,对 hession 适配,提供 hession 序列化输出 |
| org.noear:solon.serialization.jackson | 序列化插件,对 jackson 适配,提供json视图输出 或 序列化输出 |
| org.noear:solon.serialization.protostuff | 序列化插件,对 protostuff 适配,提供protostuff视图输出 或 序列化输出 |
| 视图插件:: | 说明(可置多个视图插件) |
| org.noear:solon.view.freemarker* | 视图插件,对 freemarker 适配,提供html视图输出 |
| org.noear:solon.view.jsp | 视图插件,对 jsp 适配,提供html视图输出 |
| org.noear:solon.view.velocity | 视图插件,对 velocity 适配,提供html视图输出 |
| org.noear:solon.view.thymeleaf | 视图插件,对 thymeleaf 适配,提供html视图输出 |
| org.noear:solon.view.beetl | 视图插件,对 beetl 适配,提供html视图输出 |
| org.noear:solon.view.enjoy | 视图插件,对 enjoy 适配,提供html视图输出 |
| Solon SocketD 插件 | 说明 |
|---|---|
| SocketD boot插件:: | 说明 |
| org.noear:solon.boot.socketd.jdksocket | sockted boot插件,对jdksocket适配,提供socketd服务 |
| org.noear:solon.boot.socketd.netty | sockted boot插件,对netty适配,提供socketd服务 |
| org.noear:solon.boot.socketd.rsocket | sockted boot插件,对rsocket适配,提供socketd服务 |
| org.noear:solon.boot.socketd.smartsocket | sockted boot插件,对smart-socket适配,提供socketd服务 |
| org.noear:solon.boot.socketd.websocket | sockted boot插件,对websocket适配,提供socketd服务 |
| SocketD client 插件:: | 说明 |
| org.noear:solon.sockted | 扩展插件,sockted 协议的编解码、会话等基础支持 |
| org.noear:solon.sockted.client.jdksocket | 扩展插件,sockted 协议的 jdksocket 客户端适配 |
| org.noear:solon.sockted.client.netty | 扩展插件,sockted 协议的 netty 客户端适配 |
| org.noear:solon.sockted.smartsocket | 扩展插件,sockted 协议的 smartsocket 客户端适配 |
| org.noear:solon.sockted.websocket | 扩展插件,sockted 协议的 websocket 客户端适配 |
| 其它扩展插件 | 说明 |
|---|---|
| org.noear:beetlsql-solon-plugin | beetlsql 适配插件 |
| org.noear:mybatis-solon-plugin | mybatis 适配插件 |
| org.noear:mybatis-sqlhelper-solon-plugin | mybatis-sqlhelper 适配插件 |
| org.noear:weed3-solon-plugin | weed3 适配插件 |
| org.noear:cron4j-solon-plugin | cron4j 适配插件 |
| org.noear:quartz-solon-plugin | quartz 适配插件 |
| org.noear:dubbo-solon-plugin | dubbo 适配插件 |
| org.noear:feign-solon-plugin | feign 适配插件 |
| org.noear:hasor-solon-plugin | hasor 适配插件 |
| org.noear:luffy-solon-plugin | luffy 适配插件 |
| org.noear:sureness-solon-plugin | sureness 适配插件 |
| org.noear:solon-springboot-starter | springboot 适配插件 |
| Solon Cloud 插件 | 说明 |
|---|---|
| org.noear:consul-solon-plugin | consul 适配插件(支持Solon cloud 配置服务、注册与发现服务) |
| org.noear:nacos-solon-plugin | nacos 适配插件(支持Solon cloud 配置服务、注册与发现服务) |
| org.noear:zookeeper-solon-plugin | zookeeper 适配插件(支持Solon cloud 配置服务、注册与发现服务) |
| org.noear:water-solon-plugin | water 适配插件(支持Solon cloud 配置、注册与发现、事件、日志、跟踪、等服务) |
| org.noear:rabbitmq-solon-plugin | rabbitmq 适配插件(支持Solon cloud 事件总线服务) |
| org.noear:rocketmq-solon-plugin | rocketmq 适配插件(支持Solon cloud 事件总线服务) |
| org.noear:mqtt-solon-plugin | mqtt 适配插件(支持Solon cloud 事件总线服务) |
| org.noear:kafka-solon-plugin | kafka 适配插件(支持Solon cloud 事件总线服务) |
| org.noear:guava-solon-plugin | guava 适配插件(支持Solon cloud 融断服务) |
| org.noear:sentinel-solon-plugin | sentinel 适配插件(支持Solon cloud 融断服务) |
| org.noear:semaphore-solon-plugin | semaphore 适配插件(支持Solon cloud 融断服务) |
| org.noear:aliyun-oss-solon-plugin | aliyun-oss 适配插件(支持Solon cloud 分布式文件服务) |
| org.noear:aws-s3-solon-plugin | aws-s3 适配插件(支持Solon cloud 分布式文件服务) |
| org.noear:snowflake-id-solon-plugin | snowflake 算法适配插件(支持Solon cloud 分布式ID服务) |
附:项目地址
附:入门示例
- Solon 入门教程示例:https://gitee.com/noear/solon_demo
- Solon Rpc 入门教程示例:https://gitee.com/noear/solon_rpc_demo
- Solon Cloud 入门教程示例:https://gitee.com/noear/solon_cloud_demo
- Solon 进阶教程示例:https://gitee.com/noear/solon_advance_demo
Spring Boot & Cloud 轻量替代框架 Solon 1.3.37 发布的更多相关文章
- Spring Boot & Cloud 轻量替代框架 Solon 1.4.1 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- Spring Boot & Cloud 轻量替代框架 Solon 1.3.33 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- Spring Boot & Cloud 轻量替代框架 Solon 1.3.35 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- Spring Boot 轻量替代框架 Solon 1.3.15 发布
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...
- Spring Boot 轻量替代框架 Solon 1.3.18 发布
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...
- Spring Boot 轻量替代框架 Solon 1.3.20 发布
Solon 是一个微型的Java开发框架.项目2018年启动,参考过大量前人作品:内核0.1m的身材,超高的跑分,以及良好的使用体验.支持:RPC.REST API.MVC.WebSocket.Soc ...
- Spring Boot 轻量替代框架 Solon 1.3.29 发布
Solon 是一个微型的Java开发框架.项目2018年启动,参考过大量前人作品:内核0.1m的身材,超高的跑分,以及良好的使用体验.支持:RPC.REST API.MVC.WebSocket.Soc ...
- Springboot 轻量替代框架 Solon 1.3.10 发布
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...
- Spring Boot 轻量替代框架 Solon 的架构笔记
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...
随机推荐
- 依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构
DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...
- 使用Jenkins + git submodule 实现自动化编译,解决代码安全性问题
道哥的第 030 篇原创 目录 一.一个真实的代码泄漏故事 二.Jenkins 的基本使用 1. Jenkins 是什么? 2. 安装 JDK8 3. 安装 Jenkins 4. 在浏览器中配置 Je ...
- matplotlib安装问题解决
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: no-c ...
- java面试-公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解
一.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解 公平锁:多个线程按照申请的顺序来获取锁. 非公平锁:多个线程获取锁的先后顺序与申请锁的顺序无关.[ReentrantLock 默认非公平.s ...
- 一文搞定zuul使用
前言 在深入探讨Spring Cloud Gateway的细节之前,让我们了解有关反向代理和api网关模式的一些基础知识. 什么是反向代理? 反向代理是代表其他事物进行请求的事物.它的行为更像是简单的 ...
- Dynamics CRM实体系列之字段
本节开始讲实体中的基础数据存储对象,也就是字段. Dynamics CRM目前总共有13种字段类型,分别为单行文本.选项集.多选选项集.两个选项.图像.整数.浮点数.十进制数.货币.多行文本.日期和时 ...
- 【Prolog - 2.0 基础应用】
[术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...
- BUAAOO第一单元代码分析
1.HomeWork1 思路 一个主类用于字符串得操作, 一个Poly类用于对一个多项式进行抽象,用Arraylist来对term进行封装.内部含有求导方法,添加并合并同类项的方法,toString方 ...
- 简单的了解下Java设计模式:迭代器模式(转载)
迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. Java 开发过程中遍历是常用的.如下边程序: for(int i =0 ; ...
- HashMap、ConcurrentHashMap 1.7和1.8对比
本篇内容是学习的记录,可能会有所不足. 一:JDK1.7中的HashMap JDK1.7的hashMap是由数组 + 链表组成 /** 1 << 4,表示1,左移4位,变成10000,即1 ...