Releases: opensolon/solon
Releases · opensolon/solon
Solon v3.8.0
- 插件
solon-flow第六次预览 - 新增
solon-flow-workflow插件(替代 FlowStatefulService) - 新增
solon-java25仓库(提供 ScopedValue 适配) - 添加
solonScopeLocal 接口(用于 ThreadLocal 到 ScopedValue 兼容) - 添加
solonSolon.start(Class, MultiMap) 方法 - 添加
solonThreadsUtil:newVirtualThreadFactory 方法 - 添加
solonContextHolder:currentWith 方法,替代 currentSet(标为弃用) - 添加
solonController:remoting 属性(可替代 @remoting 注解) - 添加
solon非依赖关系的 bean 异步初始化(@Init(async=true)) - 添加
solonStringable 接口 - 添加
solon'env.use' 配置支持(相对 'env',它与 'env.on' 协作时不会冲突) - 添加
solon'server.session.cookieHttpOnly' 配置支持(默认为 true) - 添加
solonContext.cookieSet(...,httpOnly) 方法 - 添加
solon-testHttpTester protocol 参数支持(方便 https 或 http 切换测试) - 添加
solon-serializationJsonPropsUtil2.dateAsFormat 添加 java.sql.Timestamp 类型支持 - 添加
solon-config-yaml依赖 solon-config-snack4 避免单个引入时忘掉 - 添加
solon-net-httputilsHttpSslSupplierAny(方便无限制的 ssl 使用,但不建议) - 添加
solon-web-rxRxEntity 类(方便对接 mcp-sdk) - 添加
solon-server会话状态的 cookie httpOnly 配置(默认为 false) - 添加
solon-server-tomcatssl 适配支持 - 添加
solon-security-validationValidatorFailureHandlerI18n 支持验证注解的国际化处理
添加solon-expressionSnelParser 类,为 TemplateParser 和 EvaluateParser 提供出入口和占位符配置 - 添加
solon-flowFlowContext:lastNode() 方法(最后一个运行的节点) - 添加
solon-flowFlowContext:lastNodeId() 方法(最后一个运行的节点Id) - 添加
solon-flowNode.getMetaAs, Link.getMetaAs 方法 - 添加
solon-flowNodeSpec:linkRemove 方法(增强修改能力) - 添加
solon-flowGraph:create(id,title,consumer) 方法 - 添加
solon-flowGraph:copy(graph,consumer) 方法(方便复制后修改) - 添加
solon-flowGraphSpec:getNode(id) 方法 - 添加
solon-flowGraphSpec:addLoop(id) 方法替代 addLooping(后者标为弃用) - 添加
solon-flowFlowEngine:eval(Graph, ..) 系列方法 - 添加
solon-aiFunctionPrompt:handleAsync(用于 mcp-server 异步支持) - 添加
solon-aiFunctionResource:handleAsync(用于 mcp-server 异步支持) - 添加
solon-aiFunctionTool:handleAsync(用于 mcp-server 异步支持) - 添加
solon-ai-coreChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由 - 添加
solon-ai-coreToolSchemaUtil.jsonSchema Publisher 泛型支持 - 添加
solon-ai-mcpmcp-java-sdk v0.17 适配(支持 2025-06-18 版本协议) - 添加
solon-ai-mcpmcp-server 异步支持 - 添加
solon-ai-mcpmcp-server streamable_stateless 支持 - 添加
solon-ai-mcpTool,Resource,Prompt 对 org.reactivestreams.Publisher 异步返回支持 - 添加
solon-ai-mcpMcpServerHost 服务宿主接口,用于隔离有状态与无状态服务 - 添加
solon-ai-mcpMcpChannel.STREAMABLE_STATELESS (服务端)无状态会话 - 添加
solon-ai-mcpMcpClientProvider:customize 方法(用于扩展 roots, sampling 等) - 添加
solon-ai-mcpmcpServer McpAsyncServerExchange 注入支持(用于扩展 roots, sampling 等) - 优化
solonapi-version 版本匹配 - 优化
solonSnelUtil snel 表达式缺参数时异常提示(避免配错名字) - 优化
solonParamWrap:getName 改用 ParamSpec.getAlias。加 '@param(name=xxx)' 注解可生效 - 优化
solon-cacheCacheService 适配没有 _cacheKeyHead 配置时,则不加前缀 - 优化
solon-net-httputilsSslContextBuilder - 优化
solon-expressionEvaluateParser 支持定义占位符(可支持{xxx}表达式) - 优化
solon-expressionTemplateParser 支持定义占位符(可支持{xxx}表达式) - 优化
solon-expressionLRUCache 性能(提高缓存性能) - 优化
solon-ai-dialect-openaiclaude 兼容性 - 优化
solon-ai-mcp mcpStreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况* 优化solon-floweval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务) - 优化
solon-flowFlowEngine:eval(Node startNode) 处理,改为从 root 开始恢复到 start 再开始执行(恢复过程中,不会执行任务) - 调整
namiNamiAttachment 切换为 ScopeLocal 接口实现 - 调整
solonContextHolder 切换为 ScopeLocal 接口实现 - 调整
solonRunHolder:parallelExecutor 改为 newFixedThreadPool - 调整
solon-dataTranExecutorDefault 切换为 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-flowActivity 节点流出改为自由模式(可以多线流出:无条件直接流出,有条件检测后流出) - 调整
solon-flowNode.getMeta 方法返回改为 Object 类型(并新增 getMetaAs) - 调整
solon-flowEvaluation:runTest 改为 runCondition - 调整
solon-flowFlowContext:incrAdd,incrGet 标为弃用(上下文数据为型只能由输入侧决定) - 调整
solon-flowCondition 更名为 ConditionDesc - 调整
solon-flowTask 更名为 ConditionDesc - 调整
solon-flowXxxDecl 命名风格改为 XxxSpec - 调整
solon-flowGraphDecl.parseByXxx 命名风格改为 GraphSpec.fromXxx - 调整
solon-flowGraph.parseByXxx 命名风格改为 Graph.fromXxx - 调整
solon-ai-mcpgetResourceTemplates、getResources 不再共享注册 - 调整
solon-ai-mcpMcpServerManager 内部接口更名为 McpPrimitivesRegistry (MCP 原语注册器) - 调整
solon-ai-mcpMcpClientProvider 默认不启用心跳机制(随着 mcp-sdk 的成熟,server 都有心跳机制了) - 修复
solonIndexFiles 路径表达式的兼容问题(添加转换*->@、:->!) - 修复
solonParamWrap:getName 加 '@param(name=xxx)' 注解时没有生效的问题(v3.7.0 出现)。对 solon-cache 会有影响 - 修复
solon-web-vertxVxWebContext._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
- 优化
solonParamWrap:getName 改用 ParamSpec.getAlias。加 '@param(name=xxx)' 注解可生效 - 优化
solon-cacheCacheService 适配没有 _cacheKeyHead 配置时,则不加前缀 - 优化
solonSnelUtil snel 表达式缺参数时异常提示(避免配错名字) - 修复
solonIndexFiles 路径表达式的兼容问题(添加转换*->@、:->!) - 修复
solonParamWrap:getName 加 '@param(name=xxx)' 注解时没有生效的问题(v3.7.0 出现)。对 solon-cache 会有影响 - 修复
solon-web-vertxVxWebContext._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
- 优化
solon-cacheCacheService 适配没有 _cacheKeyHead 配置时,则不加前缀 - 优化
solonSnelUtil snel 表达式缺参数时异常提示(避免配错名字) - 修复
solon-web-vertxVxWebContext._requestBody 如果为 null 文件上传时会出错的问题 - snack4 升为 4.0.20
- liquor 升为 1.6.6
- jackson 升为 2.19.2
- asm 升为 9.9
Solon v3.5.10
- 优化
solon-cacheCacheService 适配没有 _cacheKeyHead 配置时,则不加前缀 - 修复
solon-web-vertxVxWebContext._requestBody 如果为 null 文件上传时会出错的问题 - liquor 升为 1.6.6
- jackson 升为 2.19.2
- asm 升为 9.9
Solon v3.6.6
- 优化 solon-ai-mcp MCP 客户端与服务端异常链接状态 立即返回
- 调整 mybatis-solon-plugin 当配置的 mapper 没有对应注册时改为 warn 日志打印(之前为异常)
- 修复 solon-configuration-processor 失效的问题(v3.6.1 出现)
- snack4 升为 4.0.17
Solon v3.7.3
- 插件
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插件 - 添加
solonSolonProps:appVersionsolon.app.version配置支持 - 添加
solon接口版本的模式匹配支持(1.0+) - 添加
solon-schedulingIJobManager:jobAdd(name,scheduled,handler,data) 方法 - 添加
solon-server-tomcatjsp 适配支持 - 添加
solon-flowNode:task 硬编码能力(直接设置 TaskComponent),方便全动态场景 - 添加
solon-flowNode:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景 - 添加
solon-flowLink:when 硬编码能力(直接设置 ConditionComponent),方便全动态场景 - 添加
solon-flowStateResult ,在计算方面比 StatefulTask 更适合语义 - 添加
solon-flowFlowContext:stop(),interrupt() 方法 - 添加
solon-flowGraph 快捷创建方法 - 添加
solon-flowFlowStatefulService:eval 方法 - 添加
solon-server-tomcat-jakartajsp 支持 - 优化
solon-serverDebugUtils 支持 jetty,tomcat,undertow jsp 调试目录构建 - 优化
solon-server-undertow请求大小控制 - 优化
solon-server-jettyjsp 适配 - 优化
solon-ai-coreToolSchemaUtil 扩展能力,支持注解处理定制(方便第三方集成) - 优化
solon-ai-mcpMCP 客户端与服务端异常链接状态 立即返回 - 调整
solon-flow“链”概念改为“图”(更符合实际结构) - 调整
solon-flowChain 更名为 Graph,ChainDecl 更名为 GraphDecl - 调整
solon-flowChainInterceptor,ChainInvocation 更名为 FlowInterceptor,FlowInvocation - 调整
mybatis-solon-plugin当配置的 mapper 没有对应注册时改为 warn 日志打印(之前为异常) - 修复
solonRoutingDefault 多个双星通配符冲突的问题(v3.7.2 出现) - 修复
solon-server-jetty-jakartajsp 支持 - 修复
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
- 添加 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
- 添加 solon RunUtil.io(),timer() 方便响应式使用
- 修复 solon-rx Completable:doOnError 会中断传递的问题
- 修复 solon-server-vertx VxWebSocketImpl:remoteAddress 转换失败的问题
- 修复 solon-scheduling-simple 不能识别:
zone=+08配置问题
Solon v3.7.2
- 引入 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
- 添加 solon Router:add(clz) 方法
- 修复 solon AppContext:tryBuildBeanOfClass2 目标组件为接口时出现 getCreator null 异常(边界问题)