前言

JDK版本

JDK 是 Java开发的核心,每个版本的更新都带来了新的特性和优化。从 JDK 8 的函数式编程到 JDK 17 的长期支持(LTS),再到 JDK 21 的最新性能优化,选择适合的 JDK 版本是开发者必须掌握的技能。


一、JDK

  1. JDK 8(2014年发布)‌
  • 定位‌:经典稳定,但已过时
  • 适用场景‌
    • 维护老旧企业系统(兼容性优先)
    • 传统框架(如Spring Boot 1.x/2.x早期版本)
  • 风险提示‌
    • 官方扩展支持已结束(2025年商用需付费)
    • 缺少现代语言特性(如Lambda需手动适配)
  1. JDK 17(2021年发布,LTS)‌
  • 定位‌:平衡稳定与现代特性
  • 优势‌
    • 免费商用(OpenJDK生态成熟)
    • 支持 ‌密封类(Sealed Classes)‌、‌模式匹配‌ 等新特性
    • 性能优化(ZGC/Shenandoah垃圾回收器)
  • 适用场景‌
    • 企业新项目(Spring Boot 3.x默认支持)
    • 需要长期维护的中大型系统
  1. JDK 21(2023年发布,LTS)‌
  • 定位‌:最新技术标杆
  • 核心升级‌
    • ‌虚拟线程(Virtual Threads)‌ - 大幅提升并发性能
    • 结构化并发(预览)、分代ZGC等
  • 适用场景‌
    • 高并发微服务、云原生应用
    • 希望尝鲜未来Java特性的团队
  1. JDK版本推荐
  • JDK 8(稳定且受欢迎,兼容性至上,但安全风险较高)
  • ‌JDK 17‌(最新稳定版本,现代特性平衡,生态成熟)
  • ‌JDK 21‌(包含最新特性,革命性改进,未来主流,适合新项目)

​​​​旧系统​​ → 尽快脱离JDK 8,经JDK 11过渡至JDK 17
保守选型​​ → JDK 17(平衡稳定与现代化特性)
​​激进创新​​ → JDK 21(虚拟线程+分代ZGC重塑性能标杆)
新项目务必选择LTS版本,避免陷入半年一次的非LTS升级陷阱。

注意‌:从JDK 17开始,Oracle OpenJDK完全免费商用(无需担心许可证问题),建议优先考虑升级!

  1. 重要注意事项‌
  • ‌Oracle OpenJDK ≠ Oracle JDK‌:

    • Oracle提供的OpenJDK构建版免费,但‌仅6个月更新‌(非LTS需频繁升级)
    • 长期支持需选择第三方发行版(如Temurin/Corretto)
  • ARM架构支持‌:

    • Temurin/Corretto/Zulu均提供ARM64版本(树莓派、Mac M1/M2等适用)

二、服务器

1. ‌Apache Tomcat

  1. 核心版本对应关系
Tomcat版本 最低JDK要求 最高JDK测试版本 特性
11.0.x JDK 21 - 支持Jakarta EE 10(Servlet 6.0)规范
10.1.x JDK 11 JDK 20 支持Jakarta EE 9/10命名空间变更
9.0.x JDK 8 JDK 19 支持HTTP/2和WebSocket 1.1
8.5.x JDK 7 JDK 8 安全增强且默认关闭AJP协议
  1. 兼容性注意事项
  • 命名空间变更‌:Tomcat 10+将javax.*包路径改为jakarta.*,可能导致旧项目不兼容。‌‌
  • 高版本JDK限制‌:例如Tomcat 11.x仅支持JDK 21及以上,向下兼容性需验证。‌‌
  1. 生产环境建议
  • 推荐组合‌:

    • 保守方案:Tomcat 9.0.x + JDK 11(长期支持)。‌‌
    • 前沿方案:Tomcat 10.1.x + JDK 17(性能优化)。‌‌
  • 性能调优‌:JDK 11+建议启用G1GC,JDK 8需配置CMS垃圾回收器。‌‌

三、‌Spring组件

1. Spring Boot 与 JDK 版本对应关系‌

  1. ‌Spring Boot 3.x‌
  • 最低要求‌:JDK 17+(强制要求)
  • 推荐版本‌:JDK 21(LTS版本)
  • 特性‌:基于Spring Framework 6,全面采用Jakarta EE 9+命名空间(javax→jakarta),支持GraalVM原生镜像‌12。
  1. ‌Spring Boot 2.7.x‌
  • 支持范围‌:JDK 8~18
  • 生产推荐‌:JDK 17(LTS版本)
  • 特性‌:增强GraalVM支持,优化Kubernetes部署‌12。
  1. ‌Spring Boot 2.6.x及以下‌
  • 2.6.x‌:JDK 8~17
  • 2.5.x‌:JDK 8~16
  • 注意事项‌:低于2.5.x的版本已停止维护,建议升级‌13。

2. Spring Boot 与 Spring Cloud 版本对应关系‌

  1. ‌Spring Boot 3.x‌
  • Spring Cloud 2023.0.x‌(如2023.0.1):适配Spring Boot 3.2.x‌。
  • Spring Cloud 2022.0.x‌(如2022.0.1):适配Spring Boot 3.1.x‌。
  1. ‌Spring Boot 2.7.x‌
  • Spring Cloud 2021.0.x‌(如2022.0.1):适配Spring Boot 2.7.x‌。
  1. ‌Spring Boot 2.6.x及以下‌
  • Spring Cloud 2020.0.x‌(如Hoxton):适配Spring Boot 2.5.x~2.6.x‌。
  • 历史版本‌:Finchley(2.0.x)、Greenwich(2.1.x)等已逐步淘汰‌。

3. 兼容性注意事项‌

  1. ‌‌JDK 8用户‌
  • 必须选择 ‌Spring Boot 2.5.x/2.6.x + Spring Cloud 2020.0.x‌ 组合‌。
  • 避免使用Spring Boot 3.x(需JDK 17+)‌。
  1. ‌‌版本冲突风险‌
    不匹配的版本可能导致依赖解析失败或Bean创建异常(如BeanCreationException)‌。

  2. ‌Spring Cloud Alibaba‌

  • 2023.0.x适配Spring Boot 3.2.x + Spring Cloud 2023.0.x‌。
  • 2021.0.x适配Spring Boot 2.6.x + Spring Cloud 2021.0.x。

4. ‌版本查询工具‌

官方文档‌:Spring Cloud官网 提供最新版本表‌。
在线查询‌:访问 https://start.spring.io/actuator/info 格式化后查看 springCloudVersion 字段‌。

5. ‌生产环境建议

‌新项目‌:Spring Boot 3.2.x + JDK 21 + Spring Cloud 2023.0.x(云原生特性支持)‌。
‌旧系统维护‌:Spring Boot 2.7.x + JDK 17 + Spring Cloud 2021.0.x(平衡兼容性与稳定性)‌。

6. Spring Boot 2.7.x + JDK 8‌ + spring-security

1. spring-security-oauth2

  1. 各版本的名称及发布日期:
版本 适用 Spring Boot 适用 Spring Security 状态 备注‌
‌2.5.x 2.5.x - 2.7.x 5.5.x - 5.7.x ‌维护中 推荐稳定版
‌2.4.x 2.4.x - 2.6.x 5.4.x - 5.6.x 已弃用 建议升级
‌2.3.x 2.3.x - 2.5.x 5.3.x - 5.5.x 已弃用 不推荐
‌2.2.x 2.2.x - 2.4.x 5.2.x - 5.4.x 已弃用 仅旧项目
‌2.1.x 2.1.x - 2.3.x 5.1.x - 5.3.x 已弃用 不推荐
  1. Spring Boot 2.7.x + JDK 8‌的环境推荐版本‌
<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.5.2.RELEASE</version> <!-- 最新稳定版 -->
</dependency>
  1. Spring Security‌ 版本匹配
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.7.6</version> <!-- 推荐版本 -->
</dependency>
  1. 注意事项‌
  • Spring Security OAuth2 已弃用‌

    • 官方推荐迁移到 ‌Spring Authorization Server‌(Spring Security 5.7+ 内置)
    • 新项目建议直接使用 spring-security-oauth2-authorization-server(Spring Boot 3.x+)
  • ‌JDK 8 兼容性‌

    • Spring Security OAuth2 2.5.x 仍支持 JDK 8
    • 如需升级到 Spring Boot 3.x,需切换至 JDK 17+
  • ‌常见问题‌

    • 如果遇到 NoSuchMethodError,检查依赖冲突(如旧版 spring-security-jwt)
    • 推荐使用 spring-security-oauth2-autoconfigure 简化配置
  1. 迁移建议‌

如果计划升级,可参考以下路径:

  • 短期方案‌:继续使用 OAuth2 2.5.x(维护模式)
  • 长期方案‌:迁移到 ‌Spring Authorization Server‌(需要 Spring Boot 3.x+)

2. spring-security-jwt

  1. 版本选择‌

    ‌spring-security-jwt‌ 最终稳定版:

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-jwt</artifactId>
        <version>1.1.1.RELEASE</version> <!-- 官方最后维护版本 -->
    </dependency>
  • 兼容性说明‌:
    • 需搭配 spring-security-oauth2 2.5.x 使用(如 2.5.2.RELEASE)。
    • 不支持 Spring Boot 3.x 或 JDK 17+。

‌2. 基础配置示例‌

  • ‌JWT 密钥配置‌
    JwtConfig.java
@Configuration
public class JwtConfig {
    @Value("${jwt.secret}")
    private String secret;

    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey(secret); // 设置签名密钥
        return converter;
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter());
    }
}
  • 需在 application.properties 中配置 jwt.secret=your-256-bit-secret。

  • ‌OAuth2 资源服务器配置‌
    ResourceServerConfig.java

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/api/public/**").permitAll()
            .anyRequest().authenticated();
    }
}

‌3. 生成和解析 JWT 令牌‌

  • ‌生成令牌(授权服务器端)‌
    JwtTokenEnhancer.java
 class JwtTokenEnhancer implements TokenEnhancer {
    @Override
    public OAuth2AccessToken enhance(
        OAuth2AccessToken accessToken,
        OAuth2Authentication authentication) {
        
        Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("organization", "example-org");
        ((DefaultOAuth2AccessToken) accessToken)
            .setAdditionalInformation(additionalInfo);
        return accessToken;
    }
}
  • ‌解析令牌(资源服务器端)‌
    JwtUtils.java
 class JwtUtils {
    public static Claims extractClaims(String token, String secret) {
        return Jwts.parser()
            .setSigningKey(secret.getBytes())
            .parseClaimsJws(token)
            .getBody();
    }
}

‌4. 注意事项‌

  • 密钥安全‌:
    • 替换 JwtAccessTokenConverter 的签名逻辑)。
  • 依赖冲突‌:
    • 避免引入 jjwt 旧版本(如 0.9.x),可能引发 NoSuchMethodError。
  • 迁移建议‌:
    • 新项目推荐使用 spring-security-oauth2-authorization-server + jjwt 0.12.x。

四、‌中间件

‌数据库-Mysql

1. ‌Spring Boot 2.7.X + JDK 8 + MyBatis‌ /MyBatis-Plus‌

1. 推荐 MyBatis 版本‌

  1. mybatis-spring-boot-starter‌ 建议使用 ‌2.2.2‌ 或 ‌2.2.6‌(最新稳定版)
  • 对应 ‌MyBatis 核心版本‌:‌3.5.10‌(推荐)或 ‌3.5.9‌
  • 兼容 ‌JDK 8‌,且适配 ‌Spring Boot 2.7.X‌ 的自动配置
  1. MySQL 驱动版本‌
  • 使用 ‌8.0.28‌ 或 ‌5.1.49‌(取决于 MySQL 服务器版本)

2. 推荐 MyBatis-Plus 版本‌

  1. ‌mybatis-plus-boot-starter‌ 建议使用 ‌3.5.3.1‌ 或 ‌3.5.4‌(适配 Spring Boot 2.7.X)
  • 对应 ‌MyBatis 核心版本‌:‌3.5.10‌
  • 兼容 ‌JDK 8‌,且适配 ‌Spring Boot 2.7.X‌ 的自动配置
  1. MySQL 驱动版本‌
  • 使用 ‌8.0.28‌ 或 ‌5.1.49‌(取决于 MySQL 服务器版本)

3. 注意事项‌

  1. JDK 8 兼容性‌
  • Spring Boot 2.7.X 官方支持 JDK 8,但建议使用 ‌JDK 8u151+‌ 避免潜在的 JVM 兼容性问题。
  • ‌MyBatis 3.5.10‌ 完全兼容 JDK 8。
  • MyBatis-Plus 3.5.3.1 和 3.5.4 完全支持 ‌JDK 8‌,但建议使用 ‌JDK 8u151+‌ 以避免潜在的 JVM 兼容性问题。
  • ‌Spring Boot 2.7.X‌ 官方推荐 ‌JDK 8-17‌,但 ‌JDK 8‌ 是最稳定的选择。
  1. MyBatis 3.4.x 版本不推荐‌
  • 部分功能(如 @SelectProvider)可能存在兼容性问题,建议使用 ‌3.5.x‌ 版本。
  1. 分页插件(PageHelper)‌
  • 如需分页,建议使用 ‌pagehelper-spring-boot-starter‌(版本 1.4.6 或更高)

4. 总结‌

  • ‌MyBatis Starter 版本‌:2.2.2 或 2.2.6(最新稳定版)
  • ‌MyBatis-Plus Starter 版本‌:‌3.5.3.1‌ 或 ‌3.5.4‌(推荐)
  • ‌MyBatis 核心版本‌:3.5.10(推荐)
  • ‌MySQL JDBC 版本‌:8.0.28(MySQL 8.X)或 5.1.49(MySQL 5.X)
  • ‌JDK 版本‌:‌JDK 8u151+‌(确保稳定性)

‌数据库-Redis

2. ‌ ‌Spring Boot 2.7.X + JDK 8 + Redisson

1. 推荐 Redisson 版本‌

  1. redisson-spring-boot-starter‌ 建议使用 ‌3.23.2‌ 或 ‌3.24.1‌(适配 Spring Boot 2.7.X)
  • 对应 ‌Redisson 核心版本‌:‌3.23.2‌(推荐)
  • 兼容 ‌JDK 8‌,且适配 ‌Spring Boot 2.7.X‌ 的自动配置
  1. Redis 客户端依赖‌
  • 使用 ‌lettuce‌(Spring Boot 2.7.X 默认)或 ‌jedis‌(需手动配置)

2. 注意事项‌

  1. ‌JDK 8 兼容性‌
  • Redisson ‌3.23.2‌ 和 ‌3.24.1‌ 完全支持 ‌JDK 8‌,但建议使用 ‌JDK 8u151+‌ 以避免潜在的 JVM 兼容性问题。
  • ‌Spring Boot 2.7.X‌ 官方推荐 ‌JDK 8-17‌,但 ‌JDK 8‌ 是最稳定的选择。
  1. ‌Redis 驱动选择‌
  • ‌Lettuce‌ 是 Spring Boot 2.7.X 的默认驱动,性能更好(支持异步、响应式)。
  • ‌Jedis‌ 兼容性更好,但需手动排除 Lettuce。
  1. 分布式锁

  2. ‌节点集群配置(可选)‌

3. 总结‌

  • ‌Redisson Starter 版本‌:‌3.23.2‌(推荐)或 ‌3.24.1‌
  • ‌Redis 驱动‌:‌Lettuce‌(默认)或 ‌Jedis‌(需排除 Lettuce)
  • ‌JDK 版本‌:‌JDK 8u151+‌(确保稳定性)
  • ‌Spring Boot 版本‌:‌2.7.X‌

本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐