记录jdk8->jdk17 遇到的坑和解决方案

news2025/4/19 10:05:16

最近项目在升级jdk8->jdk17

springboot2->springboot3

顺序先升级业务服务,后升级组件服务。跟随迭代开发一起验证功能。

1.  使用parent pom 版本管理 spring相关组件的版本。 组件依赖低版本parent不变。

业务服务依赖高版本parent。

2. 修改maven jdk17 编译

<artifactId>maven-compiler-plugin</artifactId>

<properties>

<maven.compiler.source>17</maven.compiler.source>

<maven.compiler.target>17</maven.compiler.target>

<java.version>17</java.version>

<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>

</properties>

3. security 

        1)新架构差异:新的 OAuth2 授权服务器采用完全不同的模块 ,删掉废弃spring-security-oauth2 引用spring-security-oauth2-client,spring-security-oauth2-authorization-server 

        2)改造security 中安全配置方法,支持spring security 6

ResourceServerConfigurerAdapter 类已经被移除,改用新的配置方式
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .authorizeHttpRequests(authz -> {
                oAuth2Config.getMapping().forEach((key, value) -> {
                    String[] urls = value.toArray(String[]::new);
                    authz.requestMatchers(urls).access((authentication, context) -> {
                        if (authentication instanceof OAuth2AuthenticationToken oAuth2Authentication) {
                            boolean hasScope = oAuth2Authentication.getAuthorities().stream()
                                    .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("SCOPE_" + key));

                            return new AuthorizationDecision(hasScope);
                        }
                        return new AuthorizationDecision(false);
                    });
                });
                authz.requestMatchers("/oauth/token", "/oauth2/**", "/nano/**", "/test/**").permitAll();
            })
            .csrf(AbstractHttpConfigurer::disable);

    return http.build();
}

        3)旧框架已废弃:AuthorizationServerConfigurerAdapter 在 Spring Security 5.3+ 已废弃,Spring Security 6 完全移除

4.MybatisDynamicSqlInterceptor 删掉继承AbstractSqlParserHandler
- 适配MyBatis-Plus 3.5+版本
- 支持Spring Boot 3的依赖管理

5.HandlerInterceptorAdapter 改为实现 HandlerInterceptor 接口

6.import javax.annotation.Resource 改为import jakarta.annotation.Resource

7.MybatisPlusConfig 适配新3.5.0+

@Bean
public ConfigurationCustomizer configurationCustomizer() {
    return configuration -> {
       // 新版本已废弃 useDeprecatedExecutor 配置
       // 其他自定义配置可以放在这里
    };
}

8.javax.servlet 替换 jakarta.servlet

9.nacos1 升级到nacos2,部署nacos2服务端。要不会有兼容问题,同时要修改应用编排支持jdk17启动和nacos配置。

- env:
        - name: DEPLOY_ENV
          value: xxx
        - name: NACOS_SERVER_URL
          value: xxx
        - name: NACOS_NAMESPACE
          value: xxx
        - name: NACOS_GROUP
          value: xxx
        - name: NACOS_ENABLE
          value: "true"
        - name: SPRING_DISCOVERY_ENABLE
          value: "false"
        - name: OPEN_SQL
          value: open
        - name: JVM_OPTS
          value: -Xms512m -Xmx512m -XX:-OmitStackTraceInFastThrow -XX:+UseCountedLoopSafepoints
            -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/startup -Xlog:async
            -Xlog:gc*:file=/alidata1/admin/gc%t.log:utctime,level,tags:filecount=10,filesize=10M
            --add-opens java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED
        - name: NACOS_PWD
          value: xxx
        - name: NACOS_USER
          value: xxx
        - name: SPECIFIED_JAVA_HOME
          value: /opt/amazon-corretto-17.0.6.10.1-linux-x64
        - name: JAVA_OPTS
          value: -Dloader.path=./plugins -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true

10.由于网关服务还没有升级jdk17, 而且nacos已经分为了高版本和低版本两个所以通过nacos服务发现方式转发路由已经不适用,单独采用了url链接方式。 其他服务还是使用serverid方式。

zuul:
  routes:
    xxx:
      path: /xxx/**
      #serviceId: xxxx
      url: xxx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

杰弗里·辛顿:深度学习教父

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 杰弗里辛顿&#xff1a;当坚持遇见突破&#xff0c;AI迎来新纪元 一、人物简介 杰弗…

STM32蓝牙连接Android实现云端数据通信(电机控制-开源)

引言 基于 STM32F103C8T6 最小系统板完成电机控制。这个小项目采用 HAL 库方法实现&#xff0c;通过 CubeMAX 配置相关引脚&#xff0c;步进电机使用 28BYJ-48 &#xff08;四相五线式步进电机&#xff09;&#xff0c;程序通过蓝牙连接手机 APP 端进行数据收发&#xff0c; OL…

第一个Qt开发的OpenCV程序

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 下载安装Qt&#xff1a;https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下载安装OpenCV&#xff1a;https://opencv.org/releases/ 下载安装CMake&#xff1a;Downl…

TCP 如何在网络 “江湖” 立威建交?

一、特点&#xff1a; &#xff08;一&#xff09;面向连接 在进行数据传输之前&#xff0c;TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话&#xff0c;双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成&#xff0c;确保通信双方都…

【小白训练日记——2025/4/15】

变化检测常用的性能指标 变化检测&#xff08;Change Detection&#xff09;的性能评估依赖于多种指标&#xff0c;每种指标从不同角度衡量模型的准确性。以下是常用的性能指标及其含义&#xff1a; 1. 混淆矩阵&#xff08;Confusion Matrix&#xff09; 定义&#xff1a;统…

数据结构——二叉树(中)

接上一篇&#xff0c;上一篇主要讲解了关于二叉树的基本知识&#xff0c;也是为了接下来讲解关于堆结构和链式二叉树结构打基础&#xff0c;其实无论是堆结构还是链式二叉树结构&#xff0c;都是二叉树的存储结构&#xff0c;那么今天这一篇主要讲解关于堆结构的实现与应用 堆…

02-MySQL 面试题-mk

文章目录 1.mysql 有哪些存储引擎、区别是什么?1.如何定位慢查询?2.SQL语句执行很慢,如何分析?3.索引概念以及索引底层的数据结构4.什么是聚簇索引什么是非聚簇索引?5.知道什么叫覆盖索引嘛 ?6.索引创建原则有哪些?7.什么情况下索引会失效 ?8.谈一谈你对sql的优化的经验…

#include<bits/stdc++.h>

#include<bits/stdc.h> 是 C 中一个特殊的头文件&#xff0c;其作用如下&#xff1a; 核心作用 ​​包含所有标准库头文件​​ 该头文件会自动引入 C 标准库中的几乎全部头文件&#xff08;如 <iostream>、<vector>、<algorithm> 等&#xff09;&…

在企业级部署中如何优化NVIDIA GPU和容器环境配置:最佳实践与常见误区20250414

在企业级部署中如何优化NVIDIA GPU和容器环境配置&#xff1a;最佳实践与常见误区 引言 随着AI和深度学习技术的迅速发展&#xff0c;企业对GPU加速计算的需求愈加迫切。在此过程中&#xff0c;如何高效地配置宿主机与容器化环境&#xff0c;特别是利用NVIDIA GPU和相关工具&…

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法&#xff1f; 1.1 手动创建 Logger 对象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用频率较低&#xff09; 二. 常见的 Logger&#xff0c;logger&#xff0c;…

[react]Next.js之自适应布局和高清屏幕适配解决方案

序言 阅读前首先了解即将要用到的两个包的作用 1.postcss-pxtorem 自动将 CSS 中的 px 单位转换为 rem 单位按照设计稿尺寸直接写 px 值&#xff0c;由插件自动计算 rem 值 2.amfe-flexible 动态设置根元素的 font-size&#xff08;即 1rem 的值&#xff09;根据设备屏幕宽度和…

STM32H503CB升级BootLoader

首先&#xff0c;使用SWD接口&#xff0c;ST-LINK连接电脑和板子。 安装SetupSTM32CubeProgrammer_win64 版本2.19。 以下是接线和软件操作截图。

在Apple Silicon上部署Spark-TTS:四大核心库的技术魔法解析!!!

在Apple Silicon上部署Spark-TTS&#xff1a;四大核心库的技术魔法解析 &#x1f680; &#xff08;M2芯片实测&#xff5c;Python 3.12.9PyTorch 2.6.0全流程解析&#xff09; 一、核心库功能全景图 &#x1f50d; 在Spark-TTS的部署过程中&#xff0c;pip install numpy li…

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8 一.Rocky OS 下载1.官网二.配置 Rocky1.创建新的虚拟机2.稍后安装系统3.选择系统模板4.设置名字和位置5.设置大小6.自定义硬件设置核心、运存和系统镜像7.完成三.启动安装1.上下键直接选择安装2.回车安装3.设置分区(默认即可)和 roo…

cursor如何回退一键回退多个文件的修改

当我们使用 Cursor 写代码时&#xff0c;起初可能操作得很顺利&#xff0c;但某次更改或许会让代码变得面目全非。这时候如果没有使用 Git 该怎么办呢&#xff1f;别担心&#xff0c;Cursor 已经为我们考虑到了。 具体的操作如下&#xff1a; 当我们要取消某次操作时&#xf…

基于RV1126开发板的口罩识别算法开发

1. 口罩识别简介 口罩识别是一种基于深度学习的判断人员有没有戴口罩的分类算法&#xff0c;能广泛的用于安防、生产安全等多种场景。本算法先基于人脸检测和人脸标准化获取的标准人脸&#xff0c;然后输入到口罩识别分类算法进行识别。 本人脸检测算法在数据集表现如下所示&am…

PyCharm显示主菜单和工具栏

显示主菜单 新版 PyCharm 是不显示主菜单的&#xff0c;要想显示主菜单和工具栏&#xff0c;则通过 “视图” → “外观” &#xff0c;勾选 “在单独的工具栏中显示主菜单” 和 “工具栏” 即可。 设置工具栏 此时工具栏里并没有什么工具&#xff0c;因此我们需要自定义工具…

Java工程行业管理软件源码 - 全面的项目管理工具 - 工程项目模块与功能一览

工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 项目背景 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管理的提升提…

Redis 高可用集群搭建与优化实践

在分布式系统中,缓存技术用于提升性能和响应速度。 Redis 作为一款高性能的键值存储系统,广泛应用于缓存、消息队列和会话管理等场景。随着业务规模的扩大,单机 Redis 的性能和可用性逐渐无法满足需求。 因此,搭建高可用的 Redis 集群可以解决这一问题。我将详细介绍 Red…

【AI大模型】基于阿里百炼大模型进行调用

目录 一、认识阿里云百炼 模型广场 创建自己的模型 二、AI扩图示例 1、开头服务、设置秘钥 2、选择HTTP方式调用流程 3、创建任务请求示例 4、发送http请求提交任务 5、查看任务进度的流程设计 6、后端查看任务进度代码 三、总结 大家好&#xff0c;我是jstart千语…