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

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

最近项目在升级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_ENVvalue: xxx- name: NACOS_SERVER_URLvalue: xxx- name: NACOS_NAMESPACEvalue: xxx- name: NACOS_GROUPvalue: xxx- name: NACOS_ENABLEvalue: "true"- name: SPRING_DISCOVERY_ENABLEvalue: "false"- name: OPEN_SQLvalue: open- name: JVM_OPTSvalue: -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_PWDvalue: xxx- name: NACOS_USERvalue: xxx- name: SPECIFIED_JAVA_HOMEvalue: /opt/amazon-corretto-17.0.6.10.1-linux-x64- name: JAVA_OPTSvalue: -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: xxxxurl: xxx

http://www.dtcms.com/a/136046.html

相关文章:

  • 跨浏览器书签同步方案:WebDAV + Floccus插件实操指南
  • Redis 的不同数据结构分别适用于哪些微服务场景
  • vue3+vite 多个环境配置
  • 零浪费,最高效率:通往0%废品率的道路
  • 入门-C编程基础部分:6、常量
  • STM32启动流程详解
  • 【JVM优化】Minor GC的频率高的原因
  • element-ui自定义主题
  • C++23 中的可选扩展浮点类型:std::float{16|32|64|128}_t 和 std::bfloat16_t
  • ✅ MySQL 事务 MVCC ROLLBACK
  • Lua 第6部分 函数
  • 金融的未来
  • Hyperlane 是一款专为 Rust 构建的高性能 HTTP 服务框架
  • GitLab本地安装指南
  • Web Worker在uniapp鸿蒙APP中的深度应用
  • 【区块链通用服务平台及组件】全国产金融级区块链一体机 | FISCO BCOS 应用案例
  • React 18/19 使用Ant Design全局弹窗message
  • 【python】django sqlite版本过低怎么办
  • RTDETR融合[CVPR2025]BHViT中的token_mixer模块
  • 从 PyTorch 到 ONNX:深度学习模型导出全解析
  • Mamba 原理汇总
  • 【虚幻C++笔记】接口
  • MySQL联表查询底层原理
  • http/https请求解析
  • Pikachu靶场——Cross-Site Scripting
  • 需求分析---软件架构师武器库中的天眼系统
  • 记录小程序第一次调用Api,基于腾讯云Serverless函数,实现小程序的成功接入api,以及数据调用
  • 实验四 中断实验
  • 【Linux】第七章 控制对文件的访问
  • 实现类似 “更新中” 的水平进度条按钮效果