Solon v3.10.7

Solon v4.x 更新与兼容说明

</> markdown
2026年5月26日 下午6:32:22

1、纪年

  • v0: 2018 ~ 2019 (2y)
  • v1: 2020 ~ 2022 (3y)
  • v2: 2023 ~ 2024 (2y)
  • v3: 2024 ~ 2026 (1.5y)
  • v4: 2026 ~

2、v3.x 升到 v4.x 提醒

  • 提醒1:之前没有使用弃用接口的,可以直接升级
  • 提醒2:有使用弃用接口的。建议先升级到 3.10.7;替换弃用代码后,再升级到 4.0.0

3、弃用配置移除对应表(要认真核对)

移除

应用或插件移除配置名 替代配置名
solon-serverserver.session.state.domain server.session.cookieDomain
server.session.state.domain.auto server.session.cookieDomainAuto
solon-web-staticfilessolon.staticfiles.maxAge solon.staticfiles.cacheMaxAge
nacos2-solon-cloud-pluginsolon.cloud.nacos2.* solon.cloud.nacos.*

4、弃用插件移除对应表(要认真核对)

移除(以下插件已由项目官方仓库维护,或者直接使用即可)

移除插件 替代插件
easy-trans-solon-plugin com.fhs-opensource:easy-trans-solon-plugin
sms4j-solon-plugin org.dromara.sms4j:sms4j-solon-plugin
beetlsql-solon-plugin com.ibeetl:sql-solon-plugin
dbvisitor-solon-plugin net.hasor:dbvisitor-solon
sqltoy-solon-plugin com.sagframe:sagacity-sqltoy-solon-plugin
mybatis-sqlhelper-solon-plugin com.github.fangjinuo.sqlhelper:sqlhelper-mybatis
mybatis-pagehelper-solon-plugin com.github.pagehelper:pagehelper
mybatis-plus-solon-plugin com.baomidou:mybatis-plus-solon-plugin
mybatis-plus-extension-solon-plugin 同上
mybatis-flex-solon-plugin com.mybatis-flex:mybatis-flex-solon-plugin
fastmybatis-solon-plugin net.oschina.durcframework:fastmybatis-solon-plugin
bean-searcher-solon-plugin cn.zhxu:bean-searcher-solon-plugin
mybatis-tkmapper-solon-plugin tk.mybatis:mapper-solon-plugin
sa-token-solon-plugin cn.dev33:sa-token-solon-plugin
sa-token-snack4 同上
sa-token-dao-redisson-jackson 同上
liteflow-solon-plugin com.yomahub:liteflow-solon-plugin
forest-solon-plugin com.dtflys.forest:forest-solon-plugin

5、弃用注解或属性移除对应表(会有编译提醒)

移除注解或属性

应用或插件弃用注解或属性 替代注解或属性
solonorg.noear.solon.annotation::
@Bean:priority() @Condition:priority()
@Bean:injected() @Bean:autoInject()
solon-dataorg.noear.solon.data.annotation::
@Tran @Transaction
namiorg.noear.nami.annotation::
@NamiBody:contentType() @NamiMapping:headers()

6、Solon 生态弃用类或方法移除对应表(会有编译提醒)

  • solon 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon包(org.noear.solon
Solon:start(NvMap) /
SolonApp:add*() SolonApp:router():add*()
SolonApp:filter*() SolonApp:router():filter*()
SolonApp:get*() SolonApp:router():get*()
SolonApp:post*() SolonApp:router():post*()
SolonApp:head*() SolonApp:router():head*()
SolonApp:put*() SolonApp:router():put*()
SolonApp:patch*() SolonApp:router():patch*()
SolonApp:delete*() SolonApp:router():delete*()
SolonApp:socketd*() SolonApp:router():socketd*()
SolonApp:delete*() SolonApp:router():delete*()
SolonApp:converterManager() SolonApp:converters()
SolonApp:serializerManager() SolonApp:serializers()
SolonApp:renderManager() SolonApp:renders()
SolonApp:factoryManager() SolonApp:factories()
SolonApp:renderManager() SolonApp:renders()
SolonApp:chainManager() SolonApp:chains()
SolonProps:plugs*() SolonProps:plugins*()
SolonProps:plugsSort*() /
SolonProps:isAloneMode*() /
Utils:async*() RunUtil:async*()
solon包(org.noear.solon.util
/ ScopeLocal:getOr
solon包(org.noear.solon.core
AppContext:methodGet AppContext:methodWrap
AppContext:prestop AppContext:preStop
BeanContainer:wrapPublish BeanContainer:beanPublish
Constants:HEADER_CONTENT_TYPE_DEF MimeType.TEXT_PLAIN_UTF8_VALUE
ChainManager:getInterceptorNodes ChainManager:getRouterInterceptorNodes
ChainManager:addInterceptor ChainManager:addRouterInterceptor
ChainManager:addInterceptorIfAbsent ChainManager:addRouterInterceptorIfAbsent
ChainManager:removeInterceptor ChainManager:removeRouterInterceptor
ChainManager:defExecuteHandler ChainManager:defEntityConverter
ChainManager:addExecuteHandler ChainManager:addEntityConverter
ChainManager:removeExecuteHandler ChainManager:removeEntityConverter
ChainManager:getExecuteHandler /
ChainManager:getExecuteHandlerDefault /
FactoryManager:hasMvcFactory() /
FactoryManager:mvcFactory() /
FactoryManager:mvcFactory() /
Plugin:prestop() Plugin:preStop()
new Props(Map) new Props().addAll(Map)
new Props(Iterable<KeyValues>) new Props().addAll(Iterable<KeyValues>)
Props:getBean(..) Props:toBean(..)
VarHolder:getGenericType()->ParameterizedType VarHolder:getGenericType()->Type
NvMap /
MvcFactory /
LifecycleIndex /
solon包(org.noear.solon.core.handle
ActionArgumentResolver MethodArgumentResolver
ActionExecuteHandler /
ContextHolder /
ContextUtil /
EntityConverterFromExecutor /
RenderFactory /
solon包(org.noear.solon.core.route
Router:getAll(..) Router:findAll(...)
Router:getBy(..) Router:findBy(...)
RouterWrapper /
Routing:target() Routing:target(version2)
RoutingTable:matchOne(..) RoutingTable:matchOne(..., version)
RoutingTable:matchOneAndStatus(..) RoutingTable:matchOneAndStatus(..., version)
RoutingTable:matchMore(..) RoutingTable:matchMore(..., version)
solon包(org.noear.solon.core.util
ClassUtil:findPublicMethods(..) /
ClassUtil:scanClasses(.., Predicate<Class<?>>) ClassUtil:scanClasses(.., Consumer<Class<?>>)
ResourceUtil:scanClasses(..) ClassUtil:scanClasses(...)
ScanUtil:setScanner(..) /
LogUtil /
PathAnalyzer PathMatcher
solon包(org.noear.solon.core.wrap
VarSpec:getType VarSpec:getTypeEggg().getType
VarSpec:getGenericType VarSpec:getTypeEggg().getGenericType
VarSpec:isGenericType VarSpec:getTypeEggg().isParameterizedType
  • solon-handle 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-handle包(org.noear.solon.core.mvc
ActionExecuteHandlerDefault EntityConverterDefault
  • solon-data 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-data包(org.noear.solon.data.tran
TranManager:currentSet TranManager:with
TranManager:currentRemove TranManager:with
TranManager:trySuspend TranManager:with
TranManager:tryResume TranManager:with
solon-data包(org.noear.solon.data.tran.interceptor
TranInterceptor TransactionInterceptor
  • solon-data-dynamicds 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-data-dynamicds包(org.noear.solon.data.dynamicds
DynamicDataSource:setCurrentKey DynamicDsKey:use
DynamicDsKey:remove DynamicDsKey:with
DynamicDsKey:use DynamicDsKey:with
DynamicDsKey:getCurrent DynamicDsKey:with
DynamicDsKey:setCurrent DynamicDsKey:with
DynamicDsUtils /
  • solon-flow 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-flow包(org.noear.solon.flow
FlowContext:model() FlowContext:data()
FlowContext:vars() FlowContext:data()
Link:getCondition Link:getWhen
LinkSpec:condition LinkSpec:when
  • solon-net-httputils 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-net-httputils包(org.noear.solon.net.http.textstream
ServerSentEvent:id() ServerSentEvent:getId()
ServerSentEvent:event() ServerSentEvent:getEvent()
ServerSentEvent:data() ServerSentEvent:getData()
ServerSentEvent:retry() ServerSentEvent:getRetry()
ServerSentEvent:comment() ServerSentEvent:getComment()
TextStreamUtil:parseLineStream(.., subscriber) TextStreamUtil:parseLineStream(...)->Flux
TextStreamUtil:parseSseStream(.., subscriber) TextStreamUtil:parseSseStream(...)->Flux
solon-net-httputils包(org.noear.solon.net.http
HttpExtensionManager HttpConfiguration
HttpResponse:contentEncoding HttpResponse:contentCharset
HttpUtils:execAsTextStream HttpUtils:execAsLineStream
HttpUtils:execAsEventStream HttpUtils:execAsSseStream
HttpUtils:bodyRaw HttpUtils:body
HttpUtils:bodyTxt HttpUtils:bodyOfTxt
HttpUtils:bodyJson HttpUtils:bodyOfJson
  • solon-statemachine 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-statemachine包(org.noear.solon.statemachine
Event /
State /
  • solon-server 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-server包(org.noear.solon.server.ssl
SslContextFactory SslContextBuilder
solon-server包(org.noear.solon.server
ServerProps.request_useTempfile /
  • solon-serialization 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-serialization包(org.noear.solon.serialization.prop
JsonPropsUtil /
solon-serialization包(org.noear.solon.serialization
BytesSerializerRender /
ContextSerializer /
JsonRenderFactory /
BytesSerializerRender /
StringSerializerRender /
solon-serialization-abc包(org.noear.solon.serialization.abc
AbcActionExecutor /
AbcRender /
solon-serialization-fastjson包(org.noear.solon.serialization.fastjson
FastjsonActionExecutor /
FastjsonRenderFactory /
FastjsonRenderFactoryBase /
FastjsonRenderTypedFactory /
solon-serialization-fastjson2包(org.noear.solon.serialization.fastjson2
Fastjson2ActionExecutor /
Fastjson2RenderFactory /
Fastjson2RenderFactoryBase /
Fastjson2RenderTypedFactory /
solon-serialization-fury包(org.noear.solon.serialization.fury
FuryActionExecutor /
FuryRender /
solon-serialization-gson包(org.noear.solon.serialization.gson
GsonActionExecutor /
GsonRenderFactory /
GsonRenderFactoryBase /
GsonRenderTypedFactory /
solon-serialization-hessian包(org.noear.solon.serialization.hessian
HessianActionExecutor /
HessianRender /
solon-serialization-jackson包(org.noear.solon.serialization.jackson
JacksonActionExecutor /
JacksonRenderFactory /
JacksonRenderFactoryBase /
JacksonRenderTypedFactory /
solon-serialization-jackson-xml包(org.noear.solon.serialization.jackson.xml
JacksonXmlActionExecutor /
JacksonXmlRenderFactory /
JacksonXmlRenderFactoryBase /
JacksonXmlRenderTypedFactory /
solon-serialization-kryo包(org.noear.solon.serialization.kryo
KryoActionExecutor /
KryoRender /
solon-serialization-properties包(org.noear.solon.serialization.properties
PropertiesActionExecutor /
PropertiesRenderFactory /
solon-serialization-protostuff包(org.noear.solon.serialization.protostuff
ProtostuffActionExecutor /
ProtostuffRender /
solon-serialization-snack3包(org.noear.solon.serialization.snack3
SnackActionExecutor /
SnackRenderFactory /
SnackRenderFactoryBase /
SnackRenderTypedFactory /
  • solon-web 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-web-sse包(org.noear.solon.web.sse
SseEvent:build SseEvent:toString
  • solon-integration 移除类或方法
应用或插件移除类或方法名 替代类或方法名
dubbo3-solon-plugin包(org.noear.solon.extend.dubbo3
EnableDubbo org.apache.dubbo.solon.annotation.EnableDubbo
dubbo-solon-plugin包(org.noear.solon.extend.dubbo
EnableDubbo org.apache.dubbo.solon.annotation.EnableDubbo
redisson-solon-plugin包(org.redisson.solon
RedissonSupplier RedissonClientOriginalSupplier
  • nami 移除类或方法
应用或插件移除类或方法名 替代类或方法名
nami包(org.noear.nami
EncoderTyped /
NamiAttachment NamiAttach
EncoderTyped /
nami包(org.noear.nami.common
Constants ContentTypes
nami-coder-fastjson包(org.noear.nami.coder.fastjson
FastjsonTypeEncoder /
nami-coder-fastjson2包(org.noear.nami.coder.fastjson2
Fastjson2TypeEncoder /
nami-coder-jackson包(org.noear.nami.coder.jackson
JacksonTypeEncoder /
nami-coder-snack3包(org.noear.nami.coder.snack3
SnackTypeEncoder /

7、Solon AI 生态弃用类或方法移除对应表(会有编译提醒)

  • solon-ai-core 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-ai-core包(org.noear.solon.ai.core
ChatMessage.template() ChatMessage.ofUserTmpl()
ChatMessage.augment() ChatMessage.ofUserAugment()
UserMessageTemplate.param() UserMessageTemplate.paramAdd()
InMemoryChatSession:new(..,systemMessages) /
InMemoryChatSession.Builder.systemMessages() /
ToolCallResultConverter.matched() /
ChatConfig.defaultToolsContext ChatConfig.defaultToolContext (配置要注意)
ChatConfig.addDefaultTools() ChatConfig.addDefaultTool()
ChatConfig.isDefaultAutoToolCall() ChatConfig.getModelOptions().isAutoToolCall()
ChatConfig.getDefaultInterceptors() ChatConfig.getModelOptions().interceptors()
ChatConfig.getDefaultToolContext() ChatConfig.getModelOptions().toolContext()
ChatConfig.getDefaultSkills() ChatConfig.getModelOptions().skills()
ChatConfig.getDefaultOptions() ChatConfig.getModelOptions().options()
ChatConfig.getDefaultTool() ChatConfig.getModelOptions().tool()
ChatConfig.getDefaultTools() ChatConfig.getModelOptions().tools()
ChatConfig.getDefaultToolsContext() ChatConfig.getModelOptions().toolContext()
ChatModel.prompt(session) /
ChatModel.defaultToolAdd(toolObj) /
ChatOptions.optionAdd() ChatOptions.optionSet()
ChatOptions.toolsAdd() ChatOptions.toolAdd()
ChatOptions.toolsContext() ChatOptions.toolContext()
ChatOptions.toolsAdd() ChatOptions.toolAdd()
ChatSession.toNdjson() ChatMessage.toNdjson(session.getMessages())
ChatSession.loadNdjson() ChatMessage.fromNdjson(ndjson, session::addMessage)
ChatSessionDefault /
EmbeddingOptions.optionAdd() EmbeddingOptions.optionSet()
GenerateOptions.optionAdd() GenerateOptions.optionSet()
RerankingOptions.optionAdd() RerankingOptions.optionSet()
RepositoryStorable.asyncInsert() RepositoryStorable.asyncSave()
RepositoryStorable.insert() RepositoryStorable.save()
RepositoryStorable.delete() RepositoryStorable.deleteById()
RepositoryStorable.exists() RepositoryStorable.existsById()
  • solon-ai-agent 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-ai-agent包(org.noear.solon.ai.agent
ReActAgent.description() ReActAgent.role()
ReActAgent.maxStepsExtensible() ReActAgent.autoRethink()
ReActOptionsAmend.maxStepsExtensible() ReActOptionsAmend.autoRethink()
ReActTrace.pending() AgentSession.pending()
ReActTrace.isPending() AgentSession.isPending()
ReActTrace.getPendingReason() AgentSession.getPendingReason()
SimpleAgent.description() SimpleAgent.role()
TeamAgent.description() TeamAgent.role()
TeamTrace.pending() AgentSession.pending()
TeamTrace.isPending() AgentSession.isPending()
TeamTrace.getPendingReason() AgentSession.getPendingReason()
  • solon-ai-harness 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-ai-harness包(org.noear.solon.ai.harness
HarnessEngine.Builder.extensionAdd() /
HarnessProperties.maxStepsAutoExtensible() HarnessProperties.autoRethink()
  • solon-ai-mcp 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-ai-mcp包(org.noear.solon.ai.mcp
McpClientProperties.apiKey("xxx") .header("Authorization", "Bearer xxx")
McpClientProperties.apiUrl() McpClientProperties.url()
McpClientProvider.Builder.apiUrl() McpClientProvider.Builder.url()
McpClientProvider.Builder.apiKey() McpClientProvider.Builder.header("Authorization", "Bearer xxx")
McpClientProvider.Builder.headerSet() McpClientProvider.Builder.header()
McpClientProvider.Builder.serverParameters() McpClientProvider.Builder.command()
McpServerParameters.Builder /
  • solon-ai-repo 移除类或方法
应用或插件移除类或方法名 替代类或方法名
solon-ai-repo-dashvector包(org.noear.solon.ai.rag.repository
DashVectorRepository.metadataIndexFields() DashVectorRepository.metadataFields()
solon-ai-repo-redis包(org.noear.solon.ai.rag.repository
RedisRepository.metadataIndexFields() RedisRepository.metadataFields()