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

Weblogic 12c部署非Web Spring Boot应用未启动,需实现何种接口?

解决Weblogic 12c启动无Servlet Spring Boot应用的问题

我之前也碰到过一模一样的场景——把纯后台服务类型的Spring Boot应用打包成War部署到Weblogic,结果War包能正常安装,但完全看不到应用启动的迹象。核心原因其实很明确:Weblogic作为Java EE容器,默认只会触发Web相关的初始化流程(比如Servlet、Filter的加载),你的应用没有Servlet,自然不会触发Spring上下文的启动逻辑。除了WebApplicationInitializer,你还有这几个可行的方案:

1. 实现ServletContainerInitializer接口(Servlet 3.0+标准方案)

这是Servlet规范定义的容器启动钩子,Weblogic 12c完全支持。你只需要做两步:

  • 编写初始化类,在onStartup方法里手动启动Spring Boot应用:
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.Set;
import org.springframework.boot.SpringApplication;
import com.yourpackage.YourMainApplication;

public class SpringBootAppInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException {
        // 触发Spring Boot上下文启动
        SpringApplication.run(YourMainApplication.class);
    }
}
  • 在项目的src/main/resources/META-INF/services目录下创建名为javax.servlet.ServletContainerInitializer的文件,内容是你刚才编写的类的全限定名:
com.yourpackage.SpringBootAppInitializer

Weblogic启动时会扫描这个文件,找到你的初始化类并执行onStartup方法,从而启动Spring应用。

2. 配置Weblogic启动类(无需修改代码,控制台配置)

如果你不想额外编写代码,可以通过Weblogic控制台指定一个启动类:

  • 写一个简单的启动类,包含一个无参启动方法:
import org.springframework.boot.SpringApplication;
import com.yourpackage.YourMainApplication;

public class WeblogicSpringStarter {
    public void startApp() {
        SpringApplication.run(YourMainApplication.class);
    }
}
  • 在部署War包到Weblogic时,进入部署配置的「Startup and Shutdown Classes」板块,添加这个类并指定启动方法为startApp。Weblogic启动应用时会自动调用这个方法,触发Spring上下文初始化。

3. 继承SpringBootServletInitializer(兼容传统War部署)

虽然你的应用没有Servlet,但SpringBootServletInitializer本质是WebApplicationInitializer的实现类,它能帮你自动触发Spring Boot的启动流程。你只需要让主应用类继承它:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class YourMainApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(YourMainApplication.class, args);
    }
}

这样即使没有Servlet,Weblogic也会通过WebApplicationInitializer的机制启动你的Spring Boot应用。

另外需要注意:确保你的Spring Boot版本和Weblogic 12c兼容(比如Spring Boot 2.x对应Weblogic 12cR2及以上版本),避免版本冲突导致启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:26:05