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

栏目: 软件资讯 · 发布时间: 5年前

内容简介:Solon 一个类似Springboot的微型开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。 Solon 强调:克制 + 简洁 + 开放的原则...

Solon 一个类似Springboot的微型开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。

Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。

所谓更小:

内核0.1m,最小Web开发单位0.2m(相比Springboot项目包,小到可以乎略不计了)

所谓更快:

本机helloworld测试,Qps可达12万之多。可参考:《helloworld_wrk_test

所谓更自由:(代码操控自由)

// 除了注入模式之外,还可以按需手动
//
//手动获取配置
Map<String,String> db = Solon.cfg().getMap("db");

//手动获取容器里的Bean
UserService userService = Aop.get(UserService.class);

//手动监听http post请求
Solon.global().post("/user/update", x-> userService.updateById(x.paramMap()));

本次版本重大变更:

1、增加插件:springboot-solon-plugin(实现与Springboot互通)

  • 引入框架,约0.1m大小
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>springboot-solon-plugin</artifactId>
    <version>1.2.13</version>
</dependency>

? 如果有需要可引入Solon的其它插件,Solon适配的框架多较小巧 ?

  • 嵌入Springboot系统后,同时利用两套框架的容器资源与特性;或者过度期临时混合

1) 启动应用

@SpringBootLinkSolon
@SpringBootApplication
public class DemoApp {
    public static void main(String[] args) {
        //先
        Solon.start(DemoApp.class, args);
        //后
        SpringApplication.run(DemoApp.class, args);
    }
}

2) 定义Springboog组件

public interface HelloService {
    String hello(String name);
}

//此处为Springboot的注解(Solon 也有同名的注解)
@Component
public class HelloServiceImp implements HelloService {
    @Override
    public String hello(String name) {
        return "hello: " + name;
    }
}

3) 在Solon类里使用Springboot容器内的组件

//此处为Solon的注解(Springboot 也有同名的注解)
@Controller
public class SolonController {
    //使用Solon注解,将Springboot bean注入到Solon的托管类中
    @Inject
    HelloService helloService;
    
    //注入配置
    @Inject("${user.name}")
    String name;

    @Mapping("/test")
    public String home(String msg) throws Exception {
        return "solon: " + helloService.hello();
    }
}

4) 在Springboot类里使用Solon的手写特性

@RestController
public class Text2Controller {

    HelloService helloService;

    @RequestMapping("/test2")
    public String home(String msg) throws Exception {
        //使用Solon的手写特性赋值,进行懒加载
        //
        if(helloService == null){
            helloService = Aop.get(HelloService.class);
        }

        //手动获取配置
        //
        String name = Solon.cfg().get("user.name");
        
        //也可以动态增加一个请求监听
        //
        //Solon.global().get("/hello",(c)->c.output("Hello world!"));

        return "springboot: " + helloService.hello(name);
    }
}

?以上仅为演示效果设计,不一定匹配真实场景?

2、适配第三方配置与注册服务,consul 框架:consul-solon-plugin

  • 此框架由社区开发者贡献,Solon的第一个社区贡献。。。非常感谢

1) 配置示例

solon.app.name=test-consul-api
solon.app.group=test

consul.host=localhost
#consul.port=8500
#consul.token=
#consul.discovery.enable=true
#consul.discovery.hostname=12.12.12:12
#consul.discovery.tags=dev

#consul.discovery.healthCheckInterval=10s
#consul.discovery.healthCheckPath=/run/check/
consul.discovery.healthDetector=jvm,cpu,memory,disk,qps,os

#consul.locator.enable=true
#consul.locator.interval=10000

#consul.config.enable=true
#consul.config.key=test
consul.config.watch=config/,gateway/
#consul.config.interval=10000

2) 使用示例

@Controller
public class HelloController {

    //使用了consul的注册与发现服务
    //
    @NamiClient("test-consul-api:/")
    HelloInterface helloInterface;

    @Mapping("/hello")
    public String sayHello() {
    
        //consul的配置内容集成到Solon的配置体系,可注入,可手动获取
        //
        return "config:" + Solon.cfg().get("hello")+",rpc:"+helloInterface.hello0();
    }
}

以上所述就是小编给大家介绍的《Solon 1.2.13 发布,开启与 Spring Boot 的互通》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Visual Thinking

Visual Thinking

Colin Ware / Morgan Kaufmann / 2008-4-18 / USD 49.95

Increasingly, designers need to present information in ways that aid their audiences thinking process. Fortunately, results from the relatively new science of human visual perception provide valuable ......一起来看看 《Visual Thinking》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具