SpringBoot实现版本升级到2.7.18

 更新时间:2024年08月15日 08:44:37   作者:KAI丶  
这篇文章主要介绍了SpringBoot实现版本升级到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() {

        @Override
        public 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 已不再维护,官网链接也已删除

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中PrintWriter使用方法介绍

    Java中PrintWriter使用方法介绍

    这篇文章主要介绍了Java中PrintWriter使用方法介绍,文章围绕主题展开PrintWriter使用方法的详细介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • Java中notify()和notifyAll()的使用区别

    Java中notify()和notifyAll()的使用区别

    本文主要介绍了Java中notify()和notifyAll()的使用区别,文中通过示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java中Lambda表达式之Lambda语法与作用域解析

    Java中Lambda表达式之Lambda语法与作用域解析

    这篇文章主要介绍了Java中Lambda表达式之Lambda语法与作用域解析重点介绍Lambda表达式基础知识,需要的朋友可以参考下
    2017-02-02
  • java 面向对象面试集锦

    java 面向对象面试集锦

    这篇文章主要介绍了java 面向对象面试集锦的相关资料,这里整理了面向对象的基础知识,帮助大家学习理解此部分的知识,需要的朋友可以参考下
    2016-11-11
  • log4j控制台不打印日志故障的详细解决方案

    log4j控制台不打印日志故障的详细解决方案

    这篇文章主要给大家介绍了关于log4j控制台不打印日志故障的详细解决方案,log4j不提供默认配置,因为在某些环境中可能禁止输出到控制台或文件系统,需要的朋友可以参考下
    2023-08-08
  • Spring注解中@Configuration和@Component到底有啥区别

    Spring注解中@Configuration和@Component到底有啥区别

    之前一直搞不清@Component和@Configuration这两个注解到底有啥区别,一直认为被这两修饰的类可以被Spring实例化嘛,最近终于弄明白了,这篇文章主要给大家介绍了关于Spring注解中@Configuration和@Component到底有啥区别的相关资料,需要的朋友可以参考下
    2023-04-04
  • Springboot通过图片路径形式获取图片

    Springboot通过图片路径形式获取图片

    这篇文章主要介绍了Springboot通过图片路径形式获取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • JDK1.8中的ConcurrentHashMap使用及场景分析

    JDK1.8中的ConcurrentHashMap使用及场景分析

    这篇文章主要介绍了JDK1.8中的ConcurrentHashMap使用及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 浅谈Zookeeper开源客户端框架Curator

    浅谈Zookeeper开源客户端框架Curator

    这篇文章主要介绍了浅谈Zookeeper开源客户端框架Curator的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • spring的同一定时任务上一次的任务未结束前不会启动这次任务问题

    spring的同一定时任务上一次的任务未结束前不会启动这次任务问题

    这篇文章主要介绍了spring的同一定时任务上一次的任务未结束前不会启动这次任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论