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

【微服务】Spring Boot 版本升级到 2.7.18

前言

目前项目上扫描出一些 Java 依赖的代码漏洞,需要对现有依赖版本升级,记录一下遇到的问题。

<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>

升级到

<spring-boot.version>2.7.18</spring-boot.version>
<spring-cloud.version>2021.0.8</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>

2.7.18 版本的 Spring Boot 支持 JDK 8 ,再往后需要 JDK 17 了。
在这里插入图片描述

启动报错记录

1. Nacos 字样报错信息

Add a spring.config.import=nacos: property to your configuration.
在这里插入图片描述
解决方法,增加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

2. spring-data-commons 相关类找不到

org/springframework/data/repository/core/support/RepositoryMethodInvocationListener

在这里插入图片描述
解决方法,增加依赖

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><!--默认版本没效果2.7.18 可能是依赖下载问题--><version>2.7.18</version>
</dependency>

3. 不再提供默认负载均衡

nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

4. 默认不支持循环依赖

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

解决,开启循环依赖

spring:main:allow-circular-references: true

5. thymeleaf 相关类找不到

java.lang.ClassNotFoundException: org.thymeleaf.util.VersionUtils
版本冲突导致,统一thymeleaf版本

6. swagger2 相关报错

Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
Swagger2 bug导致
解决:增加配置

@Bean
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {return new BeanPostProcessor() {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof WebMvcRequestHandlerProvider) {customizeSpringfoxHandlerMappings(getHandlerMappings(bean));}return bean;}private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {List<T> copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null).collect(Collectors.toList());mappings.clear();mappings.addAll(copy);}@SuppressWarnings("unchecked")private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {try {Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");field.setAccessible(true);return (List<RequestMappingInfoHandlerMapping>) field.get(bean);} catch (IllegalArgumentException | IllegalAccessException e) {throw new IllegalStateException(e);}}};
}

配置过时

1. ResourceProperties

Spring Boot 2.4.0版本之后已作废,2.6.0版本被移除
org.springframework.boot.autoconfigure.web.ResourceProperties

2. StringUtils

commons-lang 升级到 commons-lang3

3. 单元测试注解

@BeforeEach 代替 @Before

4. 数组转集合

CollectionUtils.arrayToList(key)
替换为
Arrays.asList

5. Hystrix

Spring Cloud 2020 以后就不再支持 Hystrix
建议替换为 Sentinel。
仍要使用 Hystrix 的话,相关 yaml 配置和启用注解有变化。

Spring Security OAuth2

目前使用的版本是2.2.5,也是最后一个版本

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId><version>2.2.5.RELEASE</version>
</dependency>

Spring Boot 升级后,会有问题,需要对相关依赖版本进行降版本,降到5.3以下,
但之前 Spring Security 有个漏洞需要升级到 5.5.7 。
所以目前解决的方法是自己搭建认证服务,不使用 OAuth2

Spring Authorization Server 学习一下。
Spring Security OAuth 已不再维护,官网链接也已删除

在这里插入图片描述

相关文章:

  • Web安全基础入门+信息收集篇
  • 3.21 ARM day5
  • Java学习笔记01
  • 基于ssm的学生选课管理系统的设计与实现
  • 基于ssm的酒店民宿管理系统的设计与实现
  • JAVA面向对象编程 JAVA语言入门基础
  • 【机器学习-07】逻辑回归(Logistic Regression)的介绍和python实现
  • LeetCode 1027——最长等差数列
  • 开源流程图表库(02):Draw.io在线绘制各类图表,导出html使用
  • 【jvm】jinfo使用
  • javaSwing宿舍管理系统(三个角色)
  • MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?
  • 在 MacOS 中安装
  • 【Postman】工具使用介绍
  • 代码随想录Day55:两个字符串的删除操作、编辑距离
  • 【个人向】《HTTP图解》阅后小结
  • Java程序员幽默爆笑锦集
  • nginx 配置多 域名 + 多 https
  • PhantomJS 安装
  • Spring声明式事务管理之一:五大属性分析
  • storm drpc实例
  • 前端性能优化--懒加载和预加载
  • 正则学习笔记
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​渐进式Web应用PWA的未来
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #if和#ifdef区别
  • ( 10 )MySQL中的外键
  • (day 12)JavaScript学习笔记(数组3)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十一)图像的罗伯特梯度锐化
  • (四)JPA - JQPL 实现增删改查
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)德国人的记事本
  • 、写入Shellcode到注册表上线
  • .NET 8.0 发布到 IIS
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net mvc 获取url中controller和action
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net面试题4
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET性能优化(文摘)
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [14]内置对象
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [C++]AVL树怎么转
  • [CF482B]Interesting Array
  • [CISCN2019 华东南赛区]Web4
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]