fix(core): JDK升级为25;修复在jdk21用虚拟线程使用 synchronized 可能会出现的死锁的问题

This commit is contained in:
Join
2026-08-14 09:21:04 +08:00
parent f5f5061c3a
commit be8b93b2ea
33 changed files with 116 additions and 90 deletions
+1
View File
@@ -63,3 +63,4 @@ nbdist/
/cn-universal-web/logs/cn-universal/tcp.2025-*.gz
/cn-universal-web/logs/cn-universal/api.2025-*.gz
/.cursorindexingignore
/.workbuddy/
+2 -2
View File
@@ -24,8 +24,8 @@
</modules>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@@ -9,8 +9,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
@@ -46,16 +46,26 @@
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
<!-- GraalJS - 替代 Nashorn -->
<!-- GraalJS - 替代 Nashorn (25.x 起 js 为聚合POM无jar,改用 js-language + truffle-runtime) -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>23.0.0</version>
<artifactId>js-language</artifactId>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>23.0.0</version>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-runtime</artifactId>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>polyglot</artifactId>
<version>${graaljs.version}</version>
</dependency>
<!-- Spring Security Crypto - 提供 Base64Utils -->
@@ -12,8 +12,8 @@
<artifactId>cn-universal-notice</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -77,8 +77,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- 跳过JAR打包 -->
+14 -8
View File
@@ -12,25 +12,26 @@
<properties>
<mapper.mybatis>5.0.1</mapper.mybatis>
<maven.test.skip>true</maven.test.skip>
<java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<java.version>25</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.14.1</version>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
<parameters>true</parameters>
<proc>full</proc>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
@@ -140,6 +141,11 @@
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
</project>
@@ -12,8 +12,8 @@
<artifactId>cn-universal-plugins-extend-jdbc</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -12,8 +12,8 @@
<artifactId>cn-universal-plugins-extend-kafka</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -12,8 +12,8 @@
<artifactId>cn-universal-plugins-message-format</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -12,8 +12,8 @@
<artifactId>cn-universal-plugins-web-debug</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -7,7 +7,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/** JDK 21 对称加密工具类,支持AES和DES算法 */
/** JDK 25 对称加密工具类,支持AES和DES算法 */
public class SymmetricEncryptionUtil {
// 密钥长度常量
@@ -11,8 +11,8 @@
<description>java实现产品驱动,主要针对超复杂协议(如门锁)和平台互通的情况</description>
<artifactId>nexiot-jar-deiver-extend-plugins</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -12,8 +12,8 @@
<artifactId>nexiot-web-ide-debug-plugins</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -7,7 +7,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/** JDK 21 对称加密工具类,支持AES和DES算法 */
/** JDK 25 对称加密工具类,支持AES和DES算法 */
public class SymmetricEncryptionUtil {
// 密钥长度常量
+2 -2
View File
@@ -22,8 +22,8 @@
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
@@ -13,8 +13,8 @@
<description>IoT平台MQTT插件模块,支持动态配置和处理器链</description>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@@ -128,10 +128,11 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.14.1</version>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
<proc>full</proc>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
@@ -14,8 +14,8 @@
<description>IoT平台WebSocket协议模块,支持全双工实时通信</description>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@@ -95,10 +95,11 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.14.1</version>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
<proc>full</proc>
<encoding>UTF-8</encoding>
<parameters>true</parameters>
</configuration>
+1 -1
View File
@@ -23,7 +23,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<version>3.14.1</version>
<configuration>
<!-- 不保留方法参数名 -->
<parameters>true</parameters>
+4 -4
View File
@@ -13,8 +13,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
@@ -24,8 +24,8 @@
<artifactId>cn-universal-quartz</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<dependencies>
+2 -2
View File
@@ -12,8 +12,8 @@
<artifactId>cn-universal-rule</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<dependencies>
+4 -4
View File
@@ -1,12 +1,12 @@
# 使用已经下载的 openjdk:21 镜像作为基础,安装 nginx
FROM openjdk:21
# 使用 Eclipse Temurin JDK 25 镜像作为基础,安装 nginx
FROM eclipse-temurin:25
# 安装 nginx 和必要工具
RUN microdnf update -y && microdnf install -y \
RUN apt-get update && apt-get install -y \
nginx \
curl \
wget \
&& microdnf clean all
&& rm -rf /var/lib/apt/lists/*
# 复制前端构建文件
COPY dist/ /usr/share/nginx/html/
+2 -2
View File
@@ -1,5 +1,5 @@
# 使用本地可用的 OpenJDK 21 基础镜像,避免外网拉取失败
FROM eclipse-temurin:21-jre
# 使用本地可用的 OpenJDK 25 基础镜像,避免外网拉取失败
FROM eclipse-temurin:25-jre
# 设置工作目录
WORKDIR /app
+2 -2
View File
@@ -1,5 +1,5 @@
# 使用 Eclipse Temurin JRE 21 Alpine 版本 (镜像更小、通用)
FROM eclipse-temurin:21-jre-alpine
# 使用 Eclipse Temurin JRE 25 Alpine 版本 (镜像更小、通用)
FROM eclipse-temurin:25-jre-alpine
# 设置工作目录
WORKDIR /app
+2 -2
View File
@@ -1,5 +1,5 @@
# 使用 Amazon Corretto 21 (企业级支持)
FROM amazoncorretto:21
# 使用 Amazon Corretto 25 (企业级支持)
FROM amazoncorretto:25
# 设置工作目录
WORKDIR /app
+5 -4
View File
@@ -13,7 +13,7 @@
</parent>
<properties>
<maven.test.skip>true</maven.test.skip>
<java.version>21</java.version>
<java.version>25</java.version>
<mysql-connector-java.version>9.5.0</mysql-connector-java.version>
</properties>
<dependencies>
@@ -486,13 +486,14 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.14.1</version>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<!-- 默认保留参数名(开发/测试友好),在 prod/docker profile 中覆盖为更严格设置 -->
<parameters>true</parameters>
<proc>full</proc>
</configuration>
</plugin>
</plugins>
@@ -32,7 +32,7 @@ import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
/**
* 虚拟线程配置 - Spring Boot 3.5 + JDK 21 新特性
* 虚拟线程配置 - Spring Boot 3.5 + JDK 25 新特性
*
* <p>虚拟线程优势:
* <ul>
@@ -152,7 +152,7 @@ security.access.monitor.enabled=false
spring.devtools.restart.enabled=true
spring.devtools.livereload.enabled=true
# ================================
# Spring Boot 3.5 + JDK 21 优化配置
# Spring Boot 3.5 + JDK 25 优化配置
# ================================
# 虚拟线程配置
spring.threads.virtual.enabled=true
@@ -152,7 +152,7 @@ security.access.monitor.enabled=false
spring.devtools.restart.enabled=true
spring.devtools.livereload.enabled=true
# ================================
# Spring Boot 3.5 + JDK 21 优化配置
# Spring Boot 3.5 + JDK 25 优化配置
# ================================
# 虚拟线程配置
spring.threads.virtual.enabled=true
@@ -148,7 +148,7 @@ security.access.monitor.enabled=false
spring.devtools.restart.enabled=true
spring.devtools.livereload.enabled=true
# ================================
# Spring Boot 3.5 + JDK 21 优化配置
# Spring Boot 3.5 + JDK 25 优化配置
# ================================
# 虚拟线程配置
spring.threads.virtual.enabled=true
+3 -3
View File
@@ -75,9 +75,9 @@ cd docker
### 后端版本
- `default`: OpenJDK 21 (Oracle Linux) - 推荐
- `alpine`: OpenJDK 21 Alpine (镜像更小)
- `corretto`: Amazon Corretto 21 (企业级支持)
- `default`: OpenJDK 25 (Oracle Linux) - 推荐
- `alpine`: OpenJDK 25 Alpine (镜像更小)
- `corretto`: Amazon Corretto 25 (企业级支持)
### 前端版本
+1 -1
View File
@@ -5,7 +5,7 @@ param(
$ErrorActionPreference = "Stop"
Write-Host "🚀 开始构建 Docker 镜像 (JDK 21 + MySQL 5.8 + EMQX)..."
Write-Host "🚀 开始构建 Docker 镜像 (JDK 25 + MySQL 5.8 + EMQX)..."
Write-Host ""
Write-Host "📋 支持的构建版本:"
Write-Host " 后端版本:"
+1 -1
View File
@@ -2,7 +2,7 @@
set -e
echo "🚀 开始构建 Docker 镜像 (JDK 21 + MySQL 5.8 + EMQX)..."
echo "🚀 开始构建 Docker 镜像 (JDK 25 + MySQL 5.8 + EMQX)..."
echo ""
echo "📋 支持的构建版本:"
echo " 后端版本:"
+20 -14
View File
@@ -39,9 +39,9 @@
<spring-boot.version>3.5.0</spring-boot.version>
<druid.boot.version>1.2.25</druid.boot.version>
<QLExpress.version>3.2.0</QLExpress.version>
<java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<java.version>25</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven.javadoc.skip>true</maven.javadoc.skip>
<maven.test.skip>true</maven.test.skip>
<mysql.jdbc>8.0.33</mysql.jdbc>
@@ -56,9 +56,9 @@
<knife4j.version>4.3.0</knife4j.version>
<hutool.version>5.8.30</hutool.version>
<rocketmq.version>2.3.4</rocketmq.version>
<lombok.version>1.18.30</lombok.version>
<lombok.version>1.18.42</lombok.version>
<libs.dir>${project.basedir}/libs</libs.dir>
<graaljs.version>22.3.0</graaljs.version>
<graaljs.version>25.0.1</graaljs.version>
<!-- tk.mybatis版本 -->
<mapper.mybatis>5.0.1</mapper.mybatis>
<logback.version>1.5.11</logback.version>
@@ -213,21 +213,26 @@
<artifactId>mapper-spring-boot</artifactId>
<version>${mapper.mybatis}</version>
</dependency>
<!-- GraalJS替代Nashorn -->
<!-- GraalJS替代Nashorn (25.x 起 js 为聚合POM无jar,改用 js-language + truffle-runtime) -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>22.3.0</version>
<artifactId>js-language</artifactId>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>22.3.0</version>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-api</artifactId>
<version>22.3.0</version>
<artifactId>truffle-runtime</artifactId>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>polyglot</artifactId>
<version>${graaljs.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -269,12 +274,13 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.14.1</version>
<configuration>
<source>21</source>
<target>21</target>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<parameters>true</parameters>
<proc>full</proc>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>