关于项目使用组件版本选择的思考

关于项目使用组件版本选择的思考,第1张

关于项目使用组件版本选择的思考

在《项目中怎样做技术选型》中,我介绍了技术选型的一些思考。一旦选定了用什么技术,还涉及到版本的选择。版本不是越高越好,也不是用的越多越好,涉及很多因素。今天从具体实例入手来聊一聊版本选择的问题。

实例一 servlet版本

我最近在带一个新项目,因为搭建环境的时候,选择的版本比较新。下游是运行了好多年的老项目,版本相对老一些。其中servlet版本,新项目使用4.0.1版本,它在处理httpHeader时全转成了小写。下游使用3.1.0版本,它是按照原来的大小写原样透传的。这个问题不难处理,下游要兼容一下,做小写转换后再处理。

问题是由此引起的思考:新项目很多的版本比较新,是否是最合适的呢?这个问题我没有马上给出结论。而是说这个是个重要不紧急的事情,并不会阻塞开发进度,所以先保持现状不动,我过节有时间好好调研一下再决定。

这是新项目中的使用的一些jar包:

这是老项目中使用的一些jar包:

欢迎大家指出使用版本的问题,帮助我们保持系统稳定性。

上面总共涉及三个servlet版本:

servlet-api---2.5(实际没有用)

javax.servlet-api---3.1.0

javax.servlet-api---4.0.1

分别进行调研结果如下。

servlet-api---2.5

支持配置文件形式注册servlet、listener、filter等

javax.servlet-api---3.1.0

同时支持注解形式注入

同时支持动态注入

支持扩展插件

javax.servlet-api---4.0.1

支持从HTTP请求推送生成器等新特性

结论

因为实际我们这个项目用javax.servlet-api只是要获取http请求信息,别的都用不到。所以更合适使用线上稳定运行的版本3.1.0。

实例二 spring-boot版本

我们新项目中spring-boot的版本用的是2.3.2.RELEASE。这个也高于目前项目中使用的2.1.*的版本。我也调研了一下官网。

2.1.x版本已经在19年停止维护,商业支持(商业支持是要收费的,但是如果发现重大bug问题会公开)也在21年初停止了。如果继续使用这个版本,一旦有问题,得不到官方支持,不建议使用。

2.3.x也已经在去年停止维护,商业支持会支持到今年8月份。这表明2.3.x是一个很成熟的版本了。相比而言,虽然免费维护上已经不再支持,但是看下面:

上面可以看到2.3.x的版本官方还是建议使用的。

那在2.3.x中到底使用哪个版本呢?官网中GA(正式版本)建议的是2.3.12.RELEASE。先看一下,各个版本的变更主要变更了什么。

通过调研,变更主要是两项:

1>bug修复

2>Spring framework等框架的版本升级

bug修复


Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题。
Spring Boot 2.3.6 也是一个重要的fix bug版本
  • 修复配置元数据注解处理器可能会对布尔属性使用错误访问器的问题 #24058

  • 使用 Tomcat 时,当 Spring Boot 的等价属性 (equivalent property) 没有设置,通过 javax.net.ssl 系统属性设置的密钥和信任存储密码会被 null 覆盖 #24052

  • @DataJpaTest无法将 H2 和 schema.sql 以及 spring.datasource.schema-username 一起使用 #24023

  • 当 Quartz 数据源不是主要数据源时,JdbcStoreTypeConfiguration 会选择主要数据源的事务 #24014

  • 修复 TestTypeExcludeFilter 没有实现其超类所需要的 hashCode 和 equals #24012

  • 自动配置不应使用@PostConstruct,因为在没有依赖 jakarta-annotation-api 的情况下,它在 Java 11+ 上是被忽略的 #24009

  • 如果配置文件包含一个隐藏的路径元素,则不再加载 #23983

  • 当调用 spring-boot-loader 的 JarFileWrapper.stream() 时,出现 "java.lang.IllegalStateException: zip file closed" #23821

Spring Boot 2.3.9 BUG修复:
  • 在通过jOOQ #25279访问数据库之前,由Flyway或Liquibase执行的迁移可能尚未完成。

  • Hibernate的新的hibernate-micrometer模块的依赖性管理丢失了#25277

  • DatabaseDriver无法正确检测到Amazon Redshift #25265

  • 如果将bean定义为ConnectionFactory #25138,则缺少RabbitMQ指标

  • 使用JPA延迟存储库时,子上下文的ContextRefreshedEvent可能导致死锁#24966

  • Spring Data Solr支持未标记为已弃用 #24942

  • 在MetricsClientHttpRequestInterceptor中记录指标时失败可能会干扰RestTemplate的主要行为#24753

  • WebMvcTest和WebFluxTest忽略用户提供的Thymeleaf IDialect bean #24149

Spring framework等框架的版本升级

我们之前线上有用spring boot 2.1.x的版本,对应spring的5.1.x。spring boot 2.3.x的版本对应的主要是spring 5.2.x。看官网怎么说:

5.2.x版本这几年刚刚停止维护,商业维护还有近两年的时间。

官方推荐学习的正式版本除了最新版外,就是5.2.19.RELEASE。

spring boot除了spring framework还有一个重要组成netty。官网有介绍2.3.12.RELEASE对应的netty版本是netty4。目前公司已经在推升级组件,其中就涉及netty使用的netty4,与公司要求相符。

另外,我查了spring boot 2.3.x明确表示提供对jdk8及以上的支持,并且在jdk8上有全面的测试。

结论

建议采用 spring boot 2.3.12.RELEASE 版本。

因为2.3.x版本已经非常稳定,而2.3的小版本更新基本上都是在修复bug。而且修复的是linux交互、死锁等相对底层bug。其依赖版本也符合公司要求。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5697447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存