Skip to content

Releases: opensolon/solon

Solon v3.8.0

23 Dec 16:11

Choose a tag to compare

  • 插件 solon-flow 第六次预览
  • 新增 solon-flow-workflow 插件(替代 FlowStatefulService)
  • 新增 solon-java25 仓库(提供 ScopedValue 适配)
  • 添加 solon ScopeLocal 接口(用于 ThreadLocal 到 ScopedValue 兼容)
  • 添加 solon Solon.start(Class, MultiMap) 方法
  • 添加 solon ThreadsUtil:newVirtualThreadFactory 方法
  • 添加 solon ContextHolder:currentWith 方法,替代 currentSet(标为弃用)
  • 添加 solon Controller:remoting 属性(可替代 @remoting 注解)
  • 添加 solon 非依赖关系的 bean 异步初始化(@Init(async=true)
  • 添加 solon Stringable 接口
  • 添加 solon 'env.use' 配置支持(相对 'env',它与 'env.on' 协作时不会冲突)
  • 添加 solon 'server.session.cookieHttpOnly' 配置支持(默认为 true)
  • 添加 solon Context.cookieSet(...,httpOnly) 方法
  • 添加 solon-test HttpTester protocol 参数支持(方便 https 或 http 切换测试)
  • 添加 solon-serialization JsonPropsUtil2.dateAsFormat 添加 java.sql.Timestamp 类型支持
  • 添加 solon-config-yaml 依赖 solon-config-snack4 避免单个引入时忘掉
  • 添加 solon-net-httputils HttpSslSupplierAny(方便无限制的 ssl 使用,但不建议)
  • 添加 solon-web-rx RxEntity 类(方便对接 mcp-sdk)
  • 添加 solon-server 会话状态的 cookie httpOnly 配置(默认为 false)
  • 添加 solon-server-tomcat ssl 适配支持
  • 添加 solon-security-validation ValidatorFailureHandlerI18n 支持验证注解的国际化处理
    添加 solon-expression SnelParser 类,为 TemplateParser 和 EvaluateParser 提供出入口和占位符配置
  • 添加 solon-flow FlowContext:lastNode() 方法(最后一个运行的节点)
  • 添加 solon-flow FlowContext:lastNodeId() 方法(最后一个运行的节点Id)
  • 添加 solon-flow Node.getMetaAs, Link.getMetaAs 方法
  • 添加 solon-flow NodeSpec:linkRemove 方法(增强修改能力)
  • 添加 solon-flow Graph:create(id,title,consumer) 方法
  • 添加 solon-flow Graph:copy(graph,consumer) 方法(方便复制后修改)
  • 添加 solon-flow GraphSpec:getNode(id) 方法
  • 添加 solon-flow GraphSpec:addLoop(id) 方法替代 addLooping(后者标为弃用)
  • 添加 solon-flow FlowEngine:eval(Graph, ..) 系列方法
  • 添加 solon-ai FunctionPrompt:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai FunctionResource:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai FunctionTool:handleAsync(用于 mcp-server 异步支持)
  • 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由
  • 添加 solon-ai-core ToolSchemaUtil.jsonSchema Publisher 泛型支持
  • 添加 solon-ai-mcp mcp-java-sdk v0.17 适配(支持 2025-06-18 版本协议)
  • 添加 solon-ai-mcp mcp-server 异步支持
  • 添加 solon-ai-mcp mcp-server streamable_stateless 支持
  • 添加 solon-ai-mcp Tool,Resource,Prompt 对 org.reactivestreams.Publisher 异步返回支持
  • 添加 solon-ai-mcp McpServerHost 服务宿主接口,用于隔离有状态与无状态服务
  • 添加 solon-ai-mcp McpChannel.STREAMABLE_STATELESS (服务端)无状态会话
  • 添加 solon-ai-mcp McpClientProvider:customize 方法(用于扩展 roots, sampling 等)
  • 添加 solon-ai-mcp mcpServer McpAsyncServerExchange 注入支持(用于扩展 roots, sampling 等)
  • 优化 solon api-version 版本匹配
  • 优化 solon SnelUtil snel 表达式缺参数时异常提示(避免配错名字)
  • 优化 solon ParamWrap:getName 改用 ParamSpec.getAlias。加 '@param(name=xxx)' 注解可生效
  • 优化 solon-cache CacheService 适配没有 _cacheKeyHead 配置时,则不加前缀
  • 优化 solon-net-httputils SslContextBuilder
  • 优化 solon-expression EvaluateParser 支持定义占位符(可支持 {xxx} 表达式)
  • 优化 solon-expression TemplateParser 支持定义占位符(可支持 {xxx} 表达式)
  • 优化 solon-expression LRUCache 性能(提高缓存性能)
  • 优化 solon-ai-dialect-openai claude 兼容性
  • 优化 solon-ai-mcp mcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况* 优化 solon-flow eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务)
  • 优化 solon-flow FlowEngine:eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务)
  • 调整 nami NamiAttachment 切换为 ScopeLocal 接口实现
  • 调整 solon ContextHolder 切换为 ScopeLocal 接口实现
  • 调整 solon RunHolder:parallelExecutor 改为 newFixedThreadPool
  • 调整 solon-data TranExecutorDefault 切换为 ScopeLocal 接口实现
  • 调整 local-solon-cloud-plugin 的 config 和 i18n 服务,如果没有 group 配置,则文件不带 group 前缀(之前默认给了 DEFAULT_GROUP 组名,显得复杂)
  • 调整 rocketmq-solon-clouud-plugin 的适配,事件属性不再加 '!' (并兼容旧格式)
  • 调整 aliyun-ons-solon-clouud-plugin 的适配,事件属性不再加 '!' (并兼容旧格式)
  • 调整 rocketmq5-solon-clouud-plugin 的适配,事件属性不再加 '!' (并兼容旧格式)。添加 sql92 过滤支持
  • 调整 solon-flow 移除 Activity 节点预览属性 "$imode" 和 "$omode"
  • 调整 solon-flow Activity 节点流出改为自由模式(可以多线流出:无条件直接流出,有条件检测后流出)
  • 调整 solon-flow Node.getMeta 方法返回改为 Object 类型(并新增 getMetaAs)
  • 调整 solon-flow Evaluation:runTest 改为 runCondition
  • 调整 solon-flow FlowContext:incrAdd,incrGet 标为弃用(上下文数据为型只能由输入侧决定)
  • 调整 solon-flow Condition 更名为 ConditionDesc
  • 调整 solon-flow Task 更名为 ConditionDesc
  • 调整 solon-flow XxxDecl 命名风格改为 XxxSpec
  • 调整 solon-flow GraphDecl.parseByXxx 命名风格改为 GraphSpec.fromXxx
  • 调整 solon-flow Graph.parseByXxx 命名风格改为 Graph.fromXxx
  • 调整 solon-ai-mcp getResourceTemplates、getResources 不再共享注册
  • 调整 solon-ai-mcp McpServerManager 内部接口更名为 McpPrimitivesRegistry (MCP 原语注册器)
  • 调整 solon-ai-mcp McpClientProvider 默认不启用心跳机制(随着 mcp-sdk 的成熟,server 都有心跳机制了)
  • 修复 solon IndexFiles 路径表达式的兼容问题(添加转换 *->@:->!
  • 修复 solon ParamWrap:getName 加 '@param(name=xxx)' 注解时没有生效的问题(v3.7.0 出现)。对 solon-cache 会有影响
  • 修复 solon-web-vertx VxWebContext._requestBody 如果为 null 文件上传时会出错的问题
  • 修复 solon-docs-openapi2 返回类型中泛型失效的问题(v3.7.0 出现)
  • snack4 升为 4.0.20
  • jackson 升为 2.19.2
  • liquor 升为 1.6.6
  • asm 升为 9.9

solon 仓库补充说明

新特性:

public class Demo {
   static ScopeLocal<String> LOCAL = ScopeLocal.newInstance();

   public void test(){
       LOCAL.with("test", ()->{
           System.out.println(LOCAL.get());
       });
   }
}

solon-ai 仓库补充说明

新特性展示:1.MCP 无状态会话(STREAMABLE_STATELESS)和 2.CompletableFuture 异步MCP工具

@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp1")
public class McpServerTool {
    @ToolMapping(description = "查询天气预报", returnDirect = true)
    public CompletableFuture<String> getWeather(@Param(description = "城市位置") String location) {
        return CompletableFuture.completedFuture("晴,14度");
    }
}

传输方式对应表:(服务端与客户端,须使用对应的传输方式才可通讯)

服务端 客户端 备注
STDIO STDIO
SSE SSE
STREAMABLE STREAMABLE
STREAMABLE_STATELESS STREAMABLE 对 server 集群很友好
  • STREAMABLE_STATELESS 集群,不需要 ip_hash,但“原语”变化后无法通知 client

solon-flow 仓库补充说明

重要变化:

  • 取消“有状态”、“无状态”概念。
  • solon-flow 回归通用流程引擎(分离“有状态”的概念)。
  • 新增 solon-flow-workflow 为工作流性质的封装(未来可能会有 dataflow 等)。

兼容变化对照表:

旧名称 新名称 说明
GraphDecl GraphSpec 图定义
GraphDecl.parseByXxx GraphSpec.fromXxx 图定义加载
Graph.parseByXxx Graph.fromXxx 图加载
LinkDecl LinkSpec 连接定义
NodeDecl NodeSpec 节点定义
Condition ConditionDesc 条件描述
Task TaskDesc 任务描述(避免与 workflow 的概念冲突)
FlowStatefulService WorkflowService 工作流服务
StatefulTask Task 任务
Operation TaskAction 任动工作
TaskType TaskState 任务状态

FlowStatefulService 到 WorkflowService 的接口变化对照表:

旧名称 新名称 说明
postOperation(..) postTask(..) 提交任务
postOperationIfWaiting(..) postTaskIfWaiting(..) 提交任务
evel(..) / 执行
stepForward(..) / 单步前进
stepBack(..) / 单步后退
/ getState(..) 获取状态

新特性预览:Graph 硬编码方式(及修改能力增强)

//硬编码
Graph graph = Graph.create("demo1", "示例", spec -> {
    spec.addStart("start").title("开始").linkAdd("01");
    spec.addActivity("n1").task("@AaMetaProcessCom").linkAdd("end");
    spec.addEnd("end").title("结束");
});

//修改
Graph graphNew = Graph.copy(graph, spec -> {
    spec.getNode("n1").linkRemove("end").linkAdd("n2"); //移掉 n1 连接;改为 n2 连接
    spec.addActivity("n2").linkAdd("end");
});

新特性预览:FlowContext:lastNodeId (计算的中断与恢复)。参考:https://solon.noear.org/article/1246

flowEngine.eval(graph, context.lastNodeId(), context);
//...(从上一个节点开始执行)
flowEngine.eval(graph, context.lastNodeId(), context);

新特性预览:WorkflowService(替代 FlowStatefulService)

WorkflowService workflow = WorkflowService.of(engine, WorkflowDriver.builder()
        .stateController(new ActorStateController()) 
        .stateRepository(new InMemoryStateRepository()) 
        .build());


//1. 取出任务
Task task = workflow.getTask(graph, context);

//2. 提交任务
workflow.postTask(task.getNode(), TaskAction.FORWARD, context);

Solon v3.7.4

23 Dec 16:09

Choose a tag to compare

  • 优化 solon ParamWrap:getName 改用 ParamSpec.getAlias。加 '@param(name=xxx)' 注解可生效
  • 优化 solon-cache CacheService 适配没有 _cacheKeyHead 配置时,则不加前缀
  • 优化 solon SnelUtil snel 表达式缺参数时异常提示(避免配错名字)
  • 修复 solon IndexFiles 路径表达式的兼容问题(添加转换 *->@:->!
  • 修复 solon ParamWrap:getName 加 '@param(name=xxx)' 注解时没有生效的问题(v3.7.0 出现)。对 solon-cache 会有影响
  • 修复 solon-web-vertx VxWebContext._requestBody 如果为 null 文件上传时会出错的问题
  • 修复 solon-docs-openapi2 返回类型中泛型失效的问题(v3.7.0 出现)
  • snack4 升为 4.0.20
  • liquor 升为 1.6.6
  • jackson 升为 2.19.2
  • asm 升为 9.9

Solon v3.6.7

23 Dec 16:07

Choose a tag to compare

  • 优化 solon-cache CacheService 适配没有 _cacheKeyHead 配置时,则不加前缀
  • 优化 solon SnelUtil snel 表达式缺参数时异常提示(避免配错名字)
  • 修复 solon-web-vertx VxWebContext._requestBody 如果为 null 文件上传时会出错的问题
  • snack4 升为 4.0.20
  • liquor 升为 1.6.6
  • jackson 升为 2.19.2
  • asm 升为 9.9

Solon v3.5.10

23 Dec 16:05

Choose a tag to compare

  • 优化 solon-cache CacheService 适配没有 _cacheKeyHead 配置时,则不加前缀
  • 修复 solon-web-vertx VxWebContext._requestBody 如果为 null 文件上传时会出错的问题
  • liquor 升为 1.6.6
  • jackson 升为 2.19.2
  • asm 升为 9.9

Solon v3.6.6

05 Dec 23:01

Choose a tag to compare

  • 优化 solon-ai-mcp MCP 客户端与服务端异常链接状态 立即返回
  • 调整 mybatis-solon-plugin 当配置的 mapper 没有对应注册时改为 warn 日志打印(之前为异常)
  • 修复 solon-configuration-processor 失效的问题(v3.6.1 出现)
  • snack4 升为 4.0.17

Solon v3.7.3

05 Dec 23:03

Choose a tag to compare

  • 插件 solon-flow 第五次预览
  • 新增 solon-server-tomcat-add-jsp 插件
  • 新增 solon-server-tomcat-add-websocket 插件
  • 新增 solon-server-tomcat-add-jsp-jakarta 插件
  • 新增 solon-server-tomcat-add-websocket-jakarta 插件
  • 新增 solon-cloud-telemetry 插件
  • 新增 opentelemetry-solon-cloud-plugin 插件
  • 添加 solon SolonProps:appVersion solon.app.version 配置支持
  • 添加 solon 接口版本的模式匹配支持(1.0+
  • 添加 solon-scheduling IJobManager:jobAdd(name,scheduled,handler,data) 方法
  • 添加 solon-server-tomcat jsp 适配支持
  • 添加 solon-flow Node:task 硬编码能力(直接设置 TaskComponent),方便全动态场景
  • 添加 solon-flow Node:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景
  • 添加 solon-flow Link:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景
  • 添加 solon-flow StateResult ,在计算方面比 StatefulTask 更适合语义
  • 添加 solon-flow FlowContext:stop(),interrupt() 方法
  • 添加 solon-flow Graph 快捷创建方法
  • 添加 solon-flow FlowStatefulService:eval 方法
  • 添加 solon-server-tomcat-jakarta jsp 支持
  • 优化 solon-server DebugUtils 支持 jetty,tomcat,undertow jsp 调试目录构建
  • 优化 solon-server-undertow 请求大小控制
  • 优化 solon-server-jetty jsp 适配
  • 优化 solon-ai-core ToolSchemaUtil 扩展能力,支持注解处理定制(方便第三方集成)
  • 优化 solon-ai-mcp MCP 客户端与服务端异常链接状态 立即返回
  • 调整 solon-flow “链”概念改为“图”(更符合实际结构)
  • 调整 solon-flow Chain 更名为 Graph,ChainDecl 更名为 GraphDecl
  • 调整 solon-flow ChainInterceptor,ChainInvocation 更名为 FlowInterceptor,FlowInvocation
  • 调整 mybatis-solon-plugin 当配置的 mapper 没有对应注册时改为 warn 日志打印(之前为异常)
  • 修复 solon RoutingDefault 多个双星通配符冲突的问题(v3.7.2 出现)
  • 修复 solon-server-jetty-jakarta jsp 支持
  • 修复 solon-configuration-processor 失效的问题(v3.6.1 出现)
  • eggg 升为 1.0.10
  • snack4 升为 4.0.17
  • wood 升为 1.4.3
  • luffy 升为 1.11.1
  • folkmq 升为 1.7.13
  • fastjson2 升为 2.0.60
  • hutool 升为 5.8.41
  • smarthttp 升为 2.5.17
  • tomcat 升为 9.0.112
  • vert.x 升为 4.5.22
  • jetty.jakarta 升为 12.1.4
  • undertow.jakarta 升为 2.3.20.Final
  • logback.jakarta 升为 1.5.21

solon-flow 兼容说明:

现有应用如果没有用 ChainDecl 动态构建,不会受影响。。。如果有?需要换个类名。

solon-flow 硬编码更简便:

Graph graph = Graph.create("demo1", decl -> {
    decl.addActivity("n1").task(new Draft()).linkAdd("n2");
    decl.addActivity("n2").task(new Review()).linkAdd("n3");
    decl.addActivity("n3").task(new Confirm());
});

Solon v3.6.5

22 Nov 09:21

Choose a tag to compare

  • 添加 solon RunUtil.io(),timer() 方便响应式使用
  • 修复 solon-rx Completable:doOnError 会中断传递的问题
  • 修复 solon-server-vertx VxWebSocketImpl:remoteAddress 转换失败的问题
  • 修复 solon-scheduling-simple 不能识别:zone=+08 配置问题
  • snack4 升为 4.0.14

Solon v3.5.9

22 Nov 09:18

Choose a tag to compare

  • 添加 solon RunUtil.io(),timer() 方便响应式使用
  • 修复 solon-rx Completable:doOnError 会中断传递的问题
  • 修复 solon-server-vertx VxWebSocketImpl:remoteAddress 转换失败的问题
  • 修复 solon-scheduling-simple 不能识别:zone=+08 配置问题

Solon v3.7.2

22 Nov 12:16

Choose a tag to compare

  • 引入 jspecify 的 @Nullable,@NonNull 注解
  • 新增 resilience4j-solon-cloud-plugin 插件
  • 新增 solon-cloud-gateway websocket 协议代理支持
  • 新增 solon 启动扫描类索引机制(由 solon aot 构建时自动生成)
  • 新增 aot 构建配置(在 native 基础上去除 graalvm.buildtools),任意 jdk 版本可用
  • 添加 solon RunUtil.io(),timer() 方便响应式使用
  • 添加 solon 启动资源索引机制(通过 aot 实现)
  • 添加 solon-rx Completable:doOnErrorResume 方法
  • 添加 solon-rx Completable:subscribeOn, delay 方法,方便同步io对接
  • 添加 solon-net WebSocket:colse(code,reason) 方法及相关适配
  • 添加 solon-net-httputils HttpResponse:headerMap 方法
  • 添加 solon-data solon.dataSources 的配置提示
  • 添加 solon-web-staticfiles solon.mime.mapping 配置支持(将替代 solon.mime)
  • 优化 solon 路由匹配规则,原3个优先级升为5优先级(更细)
  • 优化 solon AppContext:beanScan 改为先加载再分批处理(确保配置类先处理)
  • 优化 solon AppContext:startInjectReview 去掉 stream 写法(减少中转,提升性能)
  • 优化 solon-logging 初始化处理,避免二次加载文件配置
  • 优化 solon 启动性能(提升 10% 到 30%)
  • 优化 solon-serve-vertx websocket 适配,避免与 solon-cloud-gateway 的 ws 代理起冲突
  • 调整 solon 编译配置荐 maven.compiler.source,target 改为 release
  • 调整 solon-serve-vertx 去除内部对象 VertxHolder(没地方用到了)
  • 调整 solon-serialization AbstractStringEntityConverter string 类型直接输出(不序列化)
  • 调整 solon ChainManager:getInterceptorNodes,addInterceptor,addInterceptorIfAbsent,removeInterceptor 恢复旧方法并标为弃用
  • 修复 nami-coder-snack4 插件元数据配置失效问题(v3.7.0 出现的)
  • 修复 solon-rx Completable:doOnError 会中断传递的问题
  • 修复 solon-server-vertx VxWebSocketImpl:remoteAddress 转换失败的问题
  • 修复 solon-scheduling-simple 不能识别:zone=+08 配置问题
  • eggg 升为 1.0.8
  • snack4 升为 4.0.14

Solon v3.7.1

08 Nov 03:22

Choose a tag to compare

  • 添加 solon Router:add(clz) 方法
  • 修复 solon AppContext:tryBuildBeanOfClass2 目标组件为接口时出现 getCreator null 异常(边界问题)