Solon 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Solon 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Solon 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Solon 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Solon 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

一个微型的Java RPC开发框架。

支持jdk8+;主框架0.1mb;组合不同的插件应对不同需求;方便定制;快速开发。

  • 更快、更小、更自由
  • 支持注解与手动两种控制模式,自由切换
  • 自带IOC & AOP容器,支持PRC、REST、MVC开发
  • 采用Handler + Context 架构;强调插件式扩展
  • 统一Http、WebSocket、Socket三种信号的开发体验
  • 插件可扩展可切换:启动插件,扩展插件,序列化插件,数据插件,会话状态插件,视图插件(可共存) 等...
  • 体验与Springboot近似,迁移成本低

Hello world:

//Handler 模式:
public class App{
    public static void main(String[] args){
        SolonApp app = Solon.start(App.class,args);
        
        app.get("/",(c)->c.output("Hello world!"));
    }
}

//Controller 模式:
@Controller
public class App{
    public static void main(String[] args){
        Solon.start(App.class,args);
    }
  
    @Mapping("/")
    public Object home(Context c){
        return "Hello world!";  
    }
}

主框架及快速集成开发包:

主框架

组件 说明
org.noear:solon-parent 框架版本管理
org.noear:solon 主框架
org.noear:nami 伴生框架(做为solon rpc 的客户端);由 Fairy 更名而来

快速集成开发包

组件 说明
org.noear:solon-rpc 可进行rpc开发的快速集成包
org.noear:solon-web 可进行web开发的快速集成包

附1:入门示例

  • Web 示例(mvc)
<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>1.2.11</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon-rpc</artifactId>
        <type>pom</type>
    </dependency>
</dependencies>
//资源路径说明(不用配置)
resources/application.properties(或 application.yml) 为应用配置文件
resources/static/ 为静态文件根目标
resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)

//调试模式:
启动参数添加:-debug=1
public class App{
    public static void main(String[] args){
        Solon.start(App.class, args);
    }
}

/*
 * mvc控制器
 */
@Controller
public class DemoController{
    //for http
    @Mapping("/hallo/{u_u}")
    public ModelAndView hallo(String u_u){
        return new ModelAndView("hallo");
    }
    
    /*
    //for web socket (需添加:solon.boot.websocket 插件)
    @Mapping(value="/hallo/{u_u}", method = MethodType.SEND)
    public ModelAndView hallo_ws(String u_u){
        return new ModelAndView("hallo");
    }
    */
}
  • Rpc 示例(+验证注解)
// - interface : 定义协议
public interface DemoService{
    void setName(Integer user_id, String name);
}

// - server : 实现协议
@Valid
@Mapping("/demo/*")
@Component(remoting = true)
public class DemoServiceImp implements DemoService{
    //添加验证注解
    @NotZero("user_id")
    public void setName(int user_id, String name){
        
    }
}

// - client - 简单示例
//注入模式
//@NamiClient("http://127.0.0.1:8080/demo/") 
//DemoService client;

//构建模式
DemoService client = Fairy.builder().upstream(n->"http://127.0.0.1:8080/demo/").create(DemoService.class); 
client.setName(1,'');

  • 获取应用配置
//非注入模式
Solon.cfg().get("app_key"); //=>String
Solon.cfg().getInt("app_id",0); //=>int
Solon.cfg().getProp("xxx.datasource"); //=>Properties

//注入模式
@Configuration //or @Controller, or @Component
public class Config{
    @Inject("${app_key}")
    String app_key;
}
  • 事务与缓存控制
@Controller
public class DemoController{
    @Db
    BaseMapper<UserModel> userService;
    
    @CacheRemove(tags = "user_${user_id}")
    @Tran
    @Mapping("/user/update")
    public void udpUser(int user_id, UserModel user){
        userService.updateById(user);
    }
    
    @Cache(tags = "user_${user_id}")
    public UserModel getUser(int user_id){
        return userService.selectById(user_id);
    }
}
  • 文件上传与输出
@Controller
public class DemoController{
    @Mapping("/file/upload")
    public void upload(UploadedFile file){
        IoUtil.save(file.content, "/data/file_" + file.name);
    }

    @Mapping("/file/down")
    public void down(Context ctx, String path){
        URL uri = Utils.getResource(path);

        ctx.contentType("json/text");
        ctx.output(uri.openStream());
    }
}
  • Servlet 注解支持
@WebFilter("/hello/*")
public class HelloFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletResponse.getWriter().write("Hello,我把你过滤了");
    }
}
  • Quartz 定时任务
@Quartz(cron7x = "0 0/1 * * * ? *")
public class HelloTask implements Runnable {
    public static void main(String[] args){
        Solon.start(QuartzRun2.class,args);
    }
    
    @Override
    public void run() {
        System.out.println("Hello world");
    }
}
  • 体外扩展加载 jar
demoApp.jar             #主程序
ext/                    #扩展目录
ext/ext.markdown.jar    #MD格式支持扩展包
  • 单链接双向RPC(客户端链上服务端之后,形成双向RPC)
//server
@Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
@Component(remoting = true)
public class HelloRpcServiceImpl implements HelloRpcService {
    public String hello(String name) {
        //此处,可以根据 client session 创建一个连接 client 的 rpc service
        NameRpcService rpc = SocketD.create(Context.current(), NameRpcService.class);

        String name2 = rpc.name(name);

        return "name=" + name;
    }
}

//client
HelloRpcService rpc = SocketD.create("tcp://localhost:"+_port, HelloRpcService.class);

String rst = rpc.hello("noear");
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
发表于开发技能专区
01/08 13:58

Java RPC 框架 Solon 发布 1.2.18,突出 RPC 特性

Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:Rpc、Rest api、Mvc 多种开发模式。 Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小开发单位...

4
16
发表于开发技能专区
2020/12/30 20:23

Solon 1.2.13 发布,开启与 Spring Boot 的互通

Solon 一个类似Springboot的微型开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。 Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小Web开发单位0.2m(相比Springboot项目包,...

8
4
发表于开发技能专区
2020/12/25 14:22

Solon 1.2.12 发布,新的惊喜

Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小Web开发单位0.2m(相比Springboot项目包,小到可以乎略不计了) 所谓更快: 本机helloworld测试,Qps可达12万之多。可参考:《helloworld_wrk_test》 所谓更自由: 代码操控自由:...

4
21
发表于开发技能专区
2020/10/21 15:02

Solon 1.1.6 发布,发力集成

Solon 是一个微型的Java开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小web开发单位1m(相比Springboot项目包,小到可以乎略不计了) 所谓更快: 本机helloworld测试,qps达10万之多。可参考:《helloworld_wrk_test》 所谓更自由: 代码操控自由: //可以容器...

5
20
发表于开发技能专区
2020/10/14 14:53

Solon 1.1 发布,更小更快更自由

Solon 是一个微型的Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。 Solon 强调:克制+简洁+开放的原则;力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小web开发单位1m(相比Springboot项目包,小到可以乎略不...

12
20
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于开源治理专区
2020/12/23 20:23

Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin

Solon 详解: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播 Solon详解(五)- Solon扩展机制之Solon Plugin Solon详解(六)- S...

0
0
发表于服务端专区
2019/12/26 17:32

Solon:Hello world!

Solon:Hello world! (一)新建一个 maven 空项目 (二)添加 maven 引用 <dependency> <groupId>org.noear</groupId> <artifactId>solon.boot.jlhttp</artifactId> <version>1.0.9</version> </de......

0
0
发表于开源治理专区
2020/12/09 19:49

Springboot mini - Solon详解(二)- Solon的核心

Solon 详解: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播 Solon详解(五)- Solon扩展机制之Solon Plugin Solon详解(六)- S...

0
0
2020/08/11 22:46

Solon 的 PathVariable 不需注解

相对于 Spring boot 的 path variable ;Solon 的不需注解,只要变量名对上即可: //path var demo // @XMapping("e/{p_q}/{obj}/{id}") public String test_e(XContext ctx, String p_q, String obj, String id)......

0
0
发表于开源治理专区
2020/12/09 19:49

Springboot mini - Solon详解(三)- Solon的web开发

Solon 详解: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播 Solon详解(五)- Solon扩展机制之Solon Plugin Solon详解(六)- S...

0
0
发表于开源治理专区
2020/12/23 20:22

Springboot mini - Solon详解(四)- Solon的事务传播机制

Solon 详解: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播 Solon详解(五)- Solon扩展机制之Solon Plugin Solon详解(六)- S...

0
0
2020/08/07 21:16

Solon 最简单demo---Hello World

Solon 的项目地址: https://gitee.com/noear/solon 里面杂七杂八的东西很多。。。今天的目标是整一个最最简单,最最小巧的 Hello world (一)用 IntelliJ IDEA 新建一个 Meven 空项目 helloworld (二)然后在 ...

0
0
发表于开源治理专区
01/09 18:29

Solon rpc 之 SocketD 协议 - 概述

Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 SocketD 协议 - 消息应答模式 Solon rpc 之 SocketD 协议 - 消息订阅模式 Solon rpc ......

0
0
发表了博客
2020/08/17 13:45

Mybatis 和 Solon 终于勾搭在一起了

终于说通 Solon 作者,让他为 Solon 框架添加事务注解支持了;并且把 mybatis-solon-plugin 的 @Df 注解更名为 @Db ,接地气多了(Df是什么鬼呢?新手肯定这么想...)。真是费尽了笔者的口水。。。此文主要重写《...

0
0
发表于开源治理专区
2020/12/23 20:23

Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展

Solon 详解: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播 Solon详解(五)- Solon扩展机制之Solon Plugin Solon详解(六)- S...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
24 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部