Solon & Solon Cloud 1.5.62 发布,轻量级 Java 基础开发框架

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

内容简介:Solon 已有120个生态扩展插件,此次更新主要为细节打磨,且对k8s和docker-compose更友好: 1、插件 solon.coud ,事件总线增加支持本地同主题多订阅模式(以支持同服务内,领域隔离的需求) // // 同一个事件主...

Solon 已有120个生态扩展插件,此次更新主要为细节打磨,且对k8s和docker-compose更友好:

1、插件 solon.coud ,事件总线增加支持本地同主题多订阅模式(以支持同服务内,领域隔离的需求)

//
// 同一个事件主题,支持多个本地订阅。可以做不同业务的领域隔离
//

@CloudEvent("demo.user.created")
public class EventHandlerDemo1 implements CloudEventHandler {
    @Override
    public boolean handler(Event event) throws Throwable {
        //送2块金币
        return true;
    }
}

@CloudEvent("demo.user.created")
public class EventHandlerDemo2 implements CloudEventHandler {
    @Override
    public boolean handler(Event event) throws Throwable {
        //与移动合作,送100块充值卡
        return true;
    }
}

2、插件 solon.view.beetl,升级 beetl 到 3.8

3、插件 solon.boot.smarthttp 升级 smart-http 为 1.1.9

4、插件 weed3-solon-puglin 升级 weed 3.4.8

5、修复 solon.extend.staticfiles 增加本地绝对位置时无效的问题

@Component
public class InitPluginDemo implements Plugin {
    @Override
    public void start(SolonApp app) {
        //添加静态目录印射

        //1.添加扩展目录:${solon.extend}/static/
        StaticMappings.add("/", new ExtendStaticRepository());
        //2.添加本地绝对目录
        StaticMappings.add("/", new FileStaticRepository("/data/sss/water/water_ext/"));
        //3.添加资源路径
        StaticMappings.add("/", new ClassPathStaticRepository("user"));
    }
}

6、增加 app.before(index, handler) 接口

public class DemoApp{
    public static void main(String[] args){
        Solon.start(DemoApp.class, args, app->{
            app.before(2, c->{
                //...
            });
        });
    }
} 

7、增加 app.cfg().isAloneMode() 接口(独立运行模式)

8、简化接口 Utils::getResourceAsString(name)

//
//读取资源文件更简便
//
String json = Utils.getResourceAsString("water_init/user.json");

9、插件 water-solon-plugin 增加基于服务名的消息订阅

10、增加 solon.cache 插件,主要增加 CacheServiceProxy 类,可根据配置自动适配缓存服务

cache1:
  driverType: "redis" #通过类型配置,自动切换缓存服务
  server: "localhost:6379"
  password: "123456"
  db: 9
@Configuration
public class DemoConfig {
    public CacheService cache(@Inject("${cache1}")CacheServiceProxy cache){
        //根据driverType配置,会自动切换不同的缓存服务实现
        return cache;
    }
}

11、增加 cloudevent-plus-solon-plugin 插件。增加基于实体的事件处理模式

//定义事件实体
@CloudEvent("user.create.event")
public class UserCreatedEvent implements CloudEventEntity {
    public long userId;
}

//类函数模式订阅事件实体
@Component
public class EventSubscriber{
    @CloudEventSubscribe
    public boolean onUserCreatedEvent(UserCreatedEvent event){
        //处理业务
        return true;
    }
}
//发送事件
public void publishDemo(){
    UserCreatedEvent event = new UserCreatedEvent();
    event.userId = 1212;
    event.publish();
}

12、增加 sqltoy-solon-plugin 插件(由 @夜の孤城 同学完成适配)

13、内核 loadEnv 将同步到 System.setProperty 和 Solon.cfg().setProperty

//加载water的环境变量,并同步到 System.setProperty 和 Solon.cfg().setProperty
//
Solon.cfg().loadEnv("water.");

14、增加新环境变量:solon.start.ping。可以控制服务启动依赖,进而控制不同的服务启动顺序

version: '3'

services:
  waterapi:
    image: noearorg/waterapi:latest
    container_name: waterapi
    environment:
      - water.ds.schema={water}
      - water.ds.server={water.mysql.io:3306}
      - water.ds.username={demo}
      - water.ds.password={1234}
      - TZ=Asia/Shanghai
    ports:
      - 9371:8080
  watersev:
    image: noearorg/watersev:latest
    container_name: watersev
    environment:
      - solon.cloud.water.server=waterapi:8080
      - solon.start.ping=waterapi:8080 #只在ping通 waterapi:8080 后,才启动服务
      - TZ=Asia/Shanghai
    depends_on:
      -  waterapi
    ports:
      - 9372:8080

15、调整 water-solon-plugin 内部的白名单机制

16、优化 序列化插件关于 JsonActionExecutor 对数组数据的泛型处理

关于 Solon

Solon 是一个轻量的 Java 基础开发框架。强调,克制 + 简洁 + 开放的原则;力求,更小、更快、更自由的体验。支持:RPC、REST API、MVC、Job、Micro service、WebSocket、Socket 等多种开发模式。短小而精悍!

关于 Solon Cloud

Solon Cloud 是一系列的接口标准和配置规范,相当于DDD模式里的防腐层概念。是 Solon 的微服务架构模式开发解决方案。

快速了解 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);

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 模式:(mvc or rest-api)
@Controller
public class App{
    public static void main(String[] args){
        Solon.start(App.class,args);
    }
  
    //限定 put & post 方法类型
    @Put
    @Post
    @Mapping("/")
    public String hello(String name){
        return "Hello " + name;
    }
}

//Remoting 模式:(rpc)
@Mapping("/")
@Remoting
public class App implements HelloService{
    public static void main(String[] args){
        Solon.start(App.class,args);
    }

    @Override
    public String hello(){
        return "Hello world!";
    }
}

附:入门示例


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具