You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eclipse中将Spring Boot Maven项目部署到WebLogic并解决部署错误

解决Spring Boot项目部署到WebLogic的WebSocket冲突问题

我来帮你搞定这个WebLogic部署的问题,你遇到的这两个错误其实都是Spring Boot自带的Tomcat WebSocket组件和WebLogic内置的Tyrus WebSocket实现冲突导致的,咱们一步步来解决:

1. 彻底排除Tomcat WebSocket相关依赖

你已经把spring-boot-starter-tomcat设为provided了,但spring-boot-starter-websocket默认会引入Tomcat的WebSocket嵌入包,这是冲突的根源。需要在pom.xml里明确排除这个依赖:

<!-- 排除Spring Boot WebSocket依赖中的Tomcat WebSocket组件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 确保Tomcat starter处于provided范围,避免打包进war -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

2. 配置WebLogic优先使用自身的WebSocket实现

在src/main/webapp/WEB-INF/weblogic.xml中添加类加载偏好配置,让WebLogic优先加载自身的Tyrus相关类,而不是尝试加载应用中的Tomcat类:

<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
    <container-descriptor>
        <!-- 优先使用WebLogic自带的WebSocket相关类 -->
        <prefer-application-packages>
            <package-name>org.glassfish.tyrus.*</package-name>
            <package-name>javax.websocket.*</package-name>
        </prefer-application-packages>
        <!-- 关闭优先加载WEB-INF类,避免冲突 -->
        <prefer-web-inf-classes>false</prefer-web-inf-classes>
    </container-descriptor>
</weblogic-web-app>

3. 检查并清理间接依赖

有些第三方库可能会间接引入Tomcat WebSocket依赖,你可以用Maven命令查看依赖树:

mvn dependency:tree

如果输出中还有tomcat-embed-websocket或其他Tomcat WebSocket相关包,找到对应的依赖并添加排除规则。

4. 确认Spring Boot启动类配置

因为是war包部署,你的启动类必须继承SpringBootServletInitializer并重写configure方法,确保WebLogic能正确识别Spring Boot应用:

@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

5. 清理缓存并重新部署

  • 清理Maven本地缓存:删除~/.m2/repository中相关的Tomcat和Spring Boot缓存文件
  • 清理WebLogic服务器缓存:删除WebLogic domain目录下的tmp和cache文件夹
  • 重新执行mvn clean package生成war包,再部署到WebLogic

错误原因解释

  1. ClassCastException:WebLogic的TyrusServletFilter尝试将Tomcat的WsServerContainer转换为自身的TyrusServerContainer,这是因为应用中同时存在两种WebSocket实现类,排除Tomcat的WebSocket依赖后就不会加载WsServerContainer了。
  2. 找不到PojoEndpointBase:这个类是Tomcat WebSocket的私有实现类,当WebLogic尝试加载WebSocket相关逻辑时,因为残留了Tomcat的依赖引用,导致找不到该类,彻底排除后即可解决。

内容的提问来源于stack exchange,提问作者adarsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:03