v2.9 为 v3.0 的过渡版本。会对一些接口做调整和优化。

### 兼容说明

* 内部插件采用 "-" 替代之前的 "."（旧包保留）
* 简化快捷方式，只保留：solon-lib 和 solon-web（solon-api，solon-rpc，solon-job 等...移除了）
  * [solon-lib（保持不变），及组合方案](/article/821)
  * [solon-web（移除了 solon-view-freemarker），及组合方案](/article/822)

之前快捷包太多，不好选择。新的方式，只保留基础的（根据业务在上面加）。


* 部分插件移除



| 旧包                             | 新包                             | 备注 |
| ------------------- | ------------------- | ---- |
| solon.test                      | solon-test                    |      |
| solon.web.flux                | solon-web-rx               |       |
| detector-solon-plugin     | solon-health-detector    |       |
| log4j2-solon-plugin        | solon-logging-log4j2     |       |
| logback-solon-plugin     | solon-logging-logback     |       |
| solon.extend.schedule     |                                     |       |
| solon.cloud.httputils        |                                     | 将由 solon-net-httputils 替代  |


* 部分插件更名（旧包，仍可用）


| 旧包                       | 新包                             | 备注 |
| ---------------- | ------------------- | ---- |
| solon.auth               | solon-security-auth             |      |
| solon.validation        | solon-security-validation      |       |
| solon.vault              | solon-security-vault     |       |


* Web Context 的变化




|                          | 操作     |                          |
|--------------------------|--------|--------------------------|
| ctx.paramsMap()          | 弃用     |  ctx.paramMap()                        |
| ctx.paramsAdd(name,value) | 弃用     | 由 ctx.paramMap().add() 替代                         |
| ctx.paramSet(name,value) | 弃用     | 由 ctx.paramMap().add() 或 .put() 替代                         |
| | | |
| ctx.headersMap()         | 弃用     |   ctx.headerMap()                       |
| | | |
| ctx.filesMap()           | 弃用     |   ctx.fileMap()                       |
| ctx.files(name)          | 弃用     | 由 ctx.fileValues(name)	 替代                         |
| | | |
| ctx.paramMap():NvMap     | 调整     | ctx.paramMap():MultiMap  |
| ctx.headerMap():NvMap    | 调整     | ctx.headerMap():MultiMap |
| ctx.cookieMap():NvMap    | 调整     | ctx.cookieMap():MultiMap |
| ctx.fileMap():NvMap      | 调整     | ctx.fileMap():MultiMap   |
| | | |
| ctx.paramNames()         | 新增     |                          |
| ctx.headerNames()        | 新增     |                          |
| ctx.cookieNames()        | 新增     |                          |
| ctx.cookieValues(name)     | 新增     |                          |
| ctx.fileNames()          | 新增     |                          |
| ctx.fileValues(name)     | 新增     |                          |


注意：关于 MultiMap （它是一个 `Iterable<KeyValues<T>>` 实现）的使用，可参考：[《XSS 的处理机制参考》](/article/500)。原来通过 `Map<String,String>` + `Map<String, List<String>>` 表示一块数据，现在通过 `MultiMap<String>` 即可，可提高性能减少内存。


### 更新说明

* 新增 solon.boot.vertx 插件
* 新增 solon.cloud.gateway 插件
* 新增 solon-config-plus
* 新增 solon.rx 插件
* 添加 NOTICE
* 添加 solon @Bean::priority 属性（用于 onMissing 条件时的运行优先级）
* 添加 solon-cloud-core 的分布式注解开关
* 添加 solon Context::cookieValues(name) 方法
* 添加 solon MultiMap 类，用于 Context 能力优化
* 添加 solon-web-rx 对 ndjson 支持 
* 添加 solon.data 配置节 `solon.dataSources`（用于自动构建数据源），支持 ENC 加密符
* 添加 solon.docs 配置节 `solon.docs`（用于自动构建文档摘要）
* 添加 solon.view.prefix 配置项支持 "file:" 前缀（支持体外目录）
* 添加 solon.scheduling.simple SimpleScheduler::isStarted 方法
* 添加 solon `@Condition(onBean, onBeanName)` 条件属性
* 添加 solon.validation ValidUtils 工具类
* 添加 solon LifecycleBean:postStart 方法
* 添加 solon MethodInterceptor 接口，替代 Interceptor（旧接口保留）
* 添加 solon.net.httputils 扩展机制，并与 solon.cloud 自动整合
* 添加 solon.net.httputils HttpResponse::headerNames 方法
* 添加 solon.cloud CloudDiscoveryService:findServices 方法
* 添加 solon `solon.plugin.exclude` 应用属性配置
* 添加 solon `solon.app.enabled` 应用属性配置（`Solon.cfg().appEnabled()` 可获取）
* 添加 solon `${.url}` 应用属性配置本级引用
* 添加 solon `--cfg` 启动参数支持（便于内嵌场景开发）
* 添加 托管类构造参数注入支持（对 kotlin 更友好） 
* 调整 solon.cloud.httputils 标为弃用，由 solon.net.httputils 替代
* 调整 smarthttp,jetty,undertow 的非标准方法的 FormUrlencoded 预处理时机
* 调整 solon.auth maven 包更名为 solon.security.auth (原 maven 包保留)
* 调整 solon.validation maven 包更名为 solon.security.validation (原 maven 包保留)
* 调整 solon.vault maven 包更名为 solon.security.vault (原 maven 包保留)
* 调整 快捷方式只保留：solon-lib 和 solon-web（原 solon-web 去掉 view，方便自选）
* 优化 AppContext::beanMake 保持与 beanScan 相同的类处理
* 优化 solon.serialization.jackson 兼容 @JsonFormat 注解时间格式和时间格式配置并存
* 优化 solon Context::body 的兼容性，避免不可读情况
* 优化 solon 调试模式与 gradle 的兼容性
* 优化 solon.boot FormUrlencodedUtils 预处理把 post 排外
* 优化 solon.web.rx 允许多次渲染输出
* 优化 kafka-solon-cloud-plugin 添加 username, password 简化配置支持（简化有账号的连接体验）
* 优化 solon.boot 413 状态处理
* 优化 solon.boot.smarthttp 适配的 maxRequestSize 设置（取 fileSize 和 bodySize 的大值）
* 优化 solon AppContext 注册和查找时以 rawClz 为主（避免以接口注册时，实例类型查不到）
* 优化 solon.mvc kotlin data class 带默认值的注入支持（表单模式下）
* 优化 solon PathAnalyzer 添加 addStarts 参数选择，支持域名匹配
* 修复 solon.view.thymeleaf 模板不存在时没有输出 500 的问题
* 修复 solon.serialization.jackson 泛型注入失效的问题
* 修复 solon.boot.smarthttp 适配在 chunked 下不能读取 body string 的问题
* 修复 solon-openapi2-knife4j 没有配置时不能启动的问题（默认改为不启用）
* 移除 旧包 solon.test（改用 solon-test）
* 移除 旧包 solon.web.flux（改用 solon-web-rx）
* 移除 旧包 detector-solon-plugin（改用 solon-health-detector）
* 移除 旧包 log4j2-solon-plugin（改用 solon-logging-log4j2）
* 移除 旧包 logback-solon-plugin（改用 solon-logging-logback）
* 移除 旧包 solon.extend.schedule
* wood 升为 1.3.0
* snack3 升为 3.2.109
* socket.d 升为 2.5.11
* luffy 升为 1.7.8
* water 升为 2.14.1
* zookeeper 升为 3.9.2
* dromara-plugins 升为 0.1.2
* kafka_2.13 升为 3.8.0
* beetlsql 升为 3.30.10-RELEASE
* beetl 升为 3.17.0.RELEASE
* mybatis 升为 3.5.16
* mybatis-flex 升为 1.9.6
* sqltoy 升为 5.6.20
* dbvisitor 升为 5.4.3
* bean-searcher 升为 4.3.0
* liteflow 升为 2.12.2
* aws.s3 升为 1.12.769
* powerjob 升为 5.1.0
* netty 升为 4.1.112.Final
* reactor-core 升为 3.6.9
* reactor-netty-http 升为 1.1.22
* vertx 升为 4.5.9
* undertow 升为 2.2.34.Final
* jetty 升为 9.4.55.v20240627
* smarthttp 升为 1.5.9