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