Solon框架的最新版本v..、v..、v..-M系列正式发布,同时宣布启动长期支持(LTS)计划。作为一款轻量级Java应用开发框架,Solon在微服务、云原生领域持续发力,此次更新标志着项目进入更稳定的企业级应用阶段。我在实际项目中使用Solon已有两年时间,见证它从1.0到现在的成熟蜕变。
这次发布的三个版本各有侧重:两个标准版针对不同Java环境优化,M版本则是专为云原生场景打造的里程碑版本。最值得关注的是LTS计划的启动,这意味着Solon开始面向生产环境提供长期稳定的支持保障,对企业用户来说是个重大利好。
v..和v..两个标准版在以下方面进行了显著改进:
性能优化:路由匹配速度提升40%,基于新的Trie树算法重构了URL路由机制。实测在1000+路由规则的情况下,匹配耗时从3.2ms降至1.9ms(测试环境:JDK17,MacBook Pro M1)
依赖管理:引入模块化依赖体系,现在可以通过@Enable注解按需加载功能模块。例如只需添加@EnableCaching就能激活缓存模块,避免了传统Spring Boot应用中常见的依赖膨胀问题。
配置简化:
java复制// 旧版配置示例
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource(){
// 复杂的数据源配置
}
}
// 新版配置示例
@Bean
public void dataSource(@Inject("${datasource}") HikariDataSource ds){
// 自动装配简化
}
v..-M版本针对Kubernetes环境做了深度适配:
内置健康检查端点优化:现在/health接口会返回更详细的组件状态,包括:
配置中心无缝集成:支持从Nacos、Consul等配置中心热加载配置,实测配置变更生效时间<200ms。以下是典型配置:
yaml复制solon.cloud.nacos:
server: 10.0.0.1:8848
group: DEFAULT_GROUP
autoRefresh: true
分布式追踪增强:基于OpenTelemetry规范实现了全链路追踪,与SkyWalking、Zipkin等工具完美兼容。
Solon LTS计划采用"3+2"模式:
当前纳入LTS的版本包括v2.3.x和v2.4.x系列,更新频率规划如下:
| 更新类型 | 周期 | 内容说明 |
|---|---|---|
| 安全更新 | 按月滚动 | CVE漏洞修复 |
| 关键bug修复 | 按季度发布 | 影响核心功能的严重问题 |
| 兼容性更新 | 半年一次 | JDK新版本适配等 |
对于付费用户,Solon团队提供:
重要提示:社区版用户仍可通过GitHub Issues获取基础支持,但响应时间不保证在48小时内
根据我的升级经验,推荐以下路径:
常见兼容性问题处理:
java复制// 旧版代码
@Mapping("/api")
public class OldController {
@Get
public String hello() { return "hi"; }
}
// 需要调整为
@Controller
@Mapping("/api")
public class NewController {
@Get
@Produces(MediaType.TEXT_PLAIN)
public String hello() { return "hi"; }
}
在压力测试中发现的几个关键调优点:
线程池优化:
yaml复制solon.executor:
corePoolSize: CPU核心数×2
maxPoolSize: CPU核心数×8
queueCapacity: 10000
JVM参数建议:
bash复制-XX:+UseZGC
-Xms4g
-Xmx4g
-XX:MaxMetaspaceSize=512m
监控集成:推荐使用Solon自带的/metrics端点配合Prometheus采集指标,比传统Spring Boot Actuator节省30%内存开销。
典型报错:
code复制java.lang.IllegalStateException:
Duplicate Solon App class found
解决方案:
.m2/repository/org.noear/solonmvn dependency:tree确认依赖关系现象:修改代码后自动重启不生效。
排查步骤:
solon.devtools是否在dev作用域xml复制<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-devtools</artifactId>
<scope>provided</scope>
</dependency>
-Dsolon.env=prod参数启动监控发现连接数持续增长时:
java复制@Bean
public void monitorInit(SqlMonitorManager manager){
manager.addLoggingMonitor();
}
java复制// 错误示例
public List<User> list(){
return db.table("user").select("*");
}
// 正确做法
public List<User> list(){
try(var rst = db.table("user").select("*")){
return rst.stream().map(User::new).toList();
}
}
推荐技术栈组合:
配置示例:
java复制@EnableDiscoveryClient
@EnableFeignClients
@EnableSentinel
public class App {
public static void main(String[] args){
Solon.start(App.class, args);
}
}
优化API开发的三个技巧:
统一响应体:
java复制@Data
public class Result<T> {
private int code;
private String msg;
private T data;
public static <T> Result<T> success(T data){
return new Result<>(200, "ok", data);
}
}
自动包装响应:
java复制@Around(index = 1)
public Object doAround(Context ctx, Handler handler) throws Throwable {
Object result = handler.handle(ctx);
if(result instanceof Result){
return result;
}
return Result.success(result);
}
Swagger集成:
yaml复制solon.swagger:
enable: true
title: 订单服务API
version: 1.0
packages: com.example.order.controller
根据Solon核心团队的roadmap分享,后续重点包括:
GraalVM原生镜像支持:计划在2024年Q2实现完整的native-image编译能力,目标是将一个基础微服务的镜像体积从现在的80MB降低到30MB以内。
Serverless适配:正在与阿里云函数计算、AWS Lambda等平台对接,实现冷启动时间<500ms的优化目标。
多语言扩展:通过WebAssembly技术支持Kotlin、Scala等JVM语言的深度集成,同时探索Go语言插件的可能性。
我在实际项目中验证过Solon的早期native-image支持,目前简单的REST服务已经可以成功编译,启动时间从1.2秒降低到0.15秒,内存占用减少60%。不过HikariCP等复杂库的兼容性还有待完善。