From 6c19e45f10c2a9c2dee375dd39e366ddb3e91fa4 Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 1 Dec 2025 11:39:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=82=E9=85=8D=E9=87=91?= =?UTF-8?q?=E8=9D=B6=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jakarta.validation.spi.ValidationProvider | 1 + .../framework/config/ClassloaderConfig.java | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 ruoyi-admin/src/main/resources/META-INF/services/jakarta.validation.spi.ValidationProvider create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ClassloaderConfig.java diff --git a/ruoyi-admin/src/main/resources/META-INF/services/jakarta.validation.spi.ValidationProvider b/ruoyi-admin/src/main/resources/META-INF/services/jakarta.validation.spi.ValidationProvider new file mode 100644 index 0000000..ea29463 --- /dev/null +++ b/ruoyi-admin/src/main/resources/META-INF/services/jakarta.validation.spi.ValidationProvider @@ -0,0 +1 @@ +org.hibernate.validator.HibernateValidator \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ClassloaderConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ClassloaderConfig.java new file mode 100644 index 0000000..114c468 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ClassloaderConfig.java @@ -0,0 +1,39 @@ +package com.ruoyi.framework.config; + +import org.springframework.context.annotation.Configuration; +import javax.annotation.PostConstruct; + +@Configuration +public class ClassloaderConfig { + + @PostConstruct + public void bindAppClassLoader() { + ClassLoader appClassLoader = this.getClass().getClassLoader(); + Thread.currentThread().setContextClassLoader(appClassLoader); + System.out.println("已强制绑定线程类加载器:" + appClassLoader); + + // 重点:主动加载 Tomcat WebSocket 核心类,确保类加载器锁定 + try { + // Tomcat WebSocket 容器类(冲突核心类) + appClassLoader.loadClass("org.apache.tomcat.websocket.server.WsServerContainer"); + // Tomcat WebSocket 初始化类 + appClassLoader.loadClass("org.apache.tomcat.websocket.server.WsServletContainerInitializer"); + // Spring WebSocket 适配类 + appClassLoader.loadClass("org.springframework.web.socket.server.standard.ServerEndpointExporter"); + // Jakarta WebSocket API 类(应用内依赖) + appClassLoader.loadClass("jakarta.websocket.server.ServerContainer"); + System.out.println("WebSocket 核心类已通过应用类加载器锁定,无冲突"); + } catch (ClassNotFoundException e) { + System.err.println("应用类加载器未找到 WebSocket 依赖,检查 spring-boot-starter-websocket 是否正常引入:" + e.getMessage()); + throw new RuntimeException("WebSocket 依赖缺失", e); + } + + // 验证 Validator 类加载 + try { + appClassLoader.loadClass("jakarta.validation.Validator"); + System.out.println("Jakarta Validation API 加载成功"); + } catch (ClassNotFoundException e) { + System.err.println("Validator 依赖缺失:" + e.getMessage()); + } + } +} \ No newline at end of file