【微服务】Spring Boot 版本升级到 2.7.18
创始人
2024-11-10 07:11:34

前言

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

2.3.2.RELEASE Hoxton.SR9 2.2.6.RELEASE 

升级到

2.7.18 2021.0.8 2021.0.5.0 

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

启动报错记录

1. Nacos 字样报错信息

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

   org.springframework.cloud   spring-cloud-starter-bootstrap  

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

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

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

     org.springframework.data     spring-data-commons          2.7.18  

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

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

  org.springframework.cloud  spring-cloud-loadbalancer  

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() {          @Override         public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {             if (bean instanceof WebMvcRequestHandlerProvider) {                 customizeSpringfoxHandlerMappings(getHandlerMappings(bean));             }             return bean;         }          private  void customizeSpringfoxHandlerMappings(List mappings) {             List copy = mappings.stream()             .filter(mapping -> mapping.getPatternParser() == null)             .collect(Collectors.toList());             mappings.clear();             mappings.addAll(copy);         }          @SuppressWarnings("unchecked")         private List getHandlerMappings(Object bean) {             try {                 Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");                 field.setAccessible(true);                 return (List) 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,也是最后一个版本

    org.springframework.cloud    spring-cloud-starter-oauth2    2.2.5.RELEASE  

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

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

在这里插入图片描述

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...