当前位置: 首页 > news >正文

springboot2.x到spring3.x的一些变化和示例说明

最近在做微服务版本升级工作,整理springboot2.x到spring3.x(spring5.x到spring6.x)的一些变化和示例说明。

1. Java 版本要求

  • Spring Boot 2.5.0:支持 Java 8 及以上版本。
  • Spring Boot 3.3.0:要求 Java 17 及以上版本,并且支持 Java 21。这意味着在升级过程中,首先需要确保 JDK 版本符合要求,并可能需要进行 JDK 的升级。

2. 底层依赖更新

  • Spring Boot 2.5.0:基于 Spring Framework 5.x 版本,并且使用 Java EE API。
  • Spring Boot 3.3.0:已经将所有底层依赖项从 Java EE 迁移到了 Jakarta EE API,基于 Jakarta EE 9 并尽可能地兼容 Jakarta EE 10。此外,Spring Boot 3.3.0 依赖于 Spring Framework 6.x 版本,这带来了许多新特性和改进。

3. 新特性和改进

  • 性能优化:Spring Boot 3.3.0 通过多种方式优化了性能,包括使用 CDS(类数据共享)功能来减少 Java 应用程序的启动时间和内存占用。此外,还添加了对 Java 21 中虚拟线程的支持,这种轻量级的线程实现可以显著提高高并发应用的吞吐量。
  • 安全性增强:新版本中增强了安全性,例如 Spring Security 添加了对 JwtAuthenticationConverter 的自动配置等。
  • 可观察性增强:Spring Boot 3.3.0 增强了应用的可观察性,支持 Micrometer 的新特性,并新增了对 Prometheus 1.x 的支持。
  • 配置文件增强:现在可以在 property 和 YAML 配置文件文件中将资源加载为 Base64 格式的值,这对于 SSL 证书等资源非常有用。
  • SBOMs 支持:Spring Boot 3.3.0 支持 SBOMs(软件材料清单),这有助于提高软件的透明度,并帮助开发人员、安全团队理解软件中包含的具体内容。

4. 废弃和移除的项

  • 在升级过程中,需要注意 Spring Boot 3.3.0 可能废弃或移除了旧版本中的一些特性和组件。因此,在升级前需要仔细查阅官方文档,了解哪些特性和组件已经不再支持或需要进行相应的替换。

示例说明(持续更新)

Jakarta EE 技术栈

// Spring 5.x
import javax.servlet.http.HttpServlet;public class MyServlet extends HttpServlet {// ...
}// Spring 6.x
import jakarta.servlet.http.HttpServlet;public class MyServlet extends HttpServlet {// ...
}

Spring Security

// Spring 5.x
@Configuration  
@EnableWebSecurity  
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {  @Override  protected void configure(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .anyRequest().authenticated()  .and()  .formLogin()  .and()  .httpBasic();  }  
}// Spring 6.x
@Configuration  
public class SecurityConfiguration {  @Bean  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {  http  .authorizeRequests()  .anyRequest().authenticated()  .and()  .formLogin()  .and()  .httpBasic();  return http.build();  }  
}

这些变化只是一些典型的情况,具体到你的项目中,你还需要根据项目的实际情况来调整。在进行迁移时,务必参考Spring官方发布的迁移指南来确保顺利过渡。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 花钱买不到系列之—linux系统调用
  • 嵌入式学习Day29---Linux软件编程---网络编程
  • 力扣--最长公共前缀
  • C++ 对象构造语义学——局部对象、全局对象的构造和析构
  • MINIO图片地址浏览器打开不显示
  • python中的列表、元组、字典之间的区别
  • 刑法学学习笔记(个人向) Part.1
  • haproxy 7000字配图超详细教程 从小白到入门
  • docker知识点
  • https://ffmpeg.org/
  • 专业技能(挖坑填坑)——MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理
  • JVM垃圾回收算法有哪些
  • javaer快速入门 goweb框架 gin
  • 机械行业数字化生产供应链产品解决方案(十六)
  • 深度学习------------------卷积神经网络(LeNet)
  • 78. Subsets
  • CSS 专业技巧
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Mithril.js 入门介绍
  • MySQL数据库运维之数据恢复
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • v-if和v-for连用出现的问题
  • 读懂package.json -- 依赖管理
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 深度学习在携程攻略社区的应用
  • 双管齐下,VMware的容器新战略
  • 思考 CSS 架构
  • 为什么要用IPython/Jupyter?
  • 用mpvue开发微信小程序
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 进程与线程(三)——进程/线程间通信
  • # .NET Framework中使用命名管道进行进程间通信
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (C语言)fgets与fputs函数详解
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)基于IDEA的JAVA基础10
  • (转)关于pipe()的详细解析
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net 程序发生了一个不可捕获的异常
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET中winform传递参数至Url并获得返回值或文件
  • @AliasFor注解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ IO.File ] FileSystemWatcher
  • [100天算法】-实现 strStr()(day 52)
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution