如果我使用 Spring Boot 将 Web 应用开发为 war,为什么还需要 main 方法?

Why do I need main method if I develop web app as war using Spring Boot?

我正在使用 Spring Boot 开发 Web 应用程序。我的典型部署是生成 war 并将其放置在 Tomcat 目录中的 webapps 文件夹中。

我注意到 SpringBoot,我需要一个 main 方法。我想知道为什么需要这个。如果有办法避免它,那会是什么?

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

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

}

在单独的网络容器中运行

您不需要 main 方法,您只需扩展 SpringBootServletInitializer,如 Kryger 所述。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

在命令行中作为独立应用程序运行

这里你需要 main 方法,这样你就可以在命令行中使用 java -jar 运行 它。

public class Application {
    public static void main(String[] args){
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
    }
....
....

来源:https://spring.io/guides/gs/convert-jar-to-war/

构建 war 并将其放置在 Tomcat 的 webapps 文件夹中的典型部署方案不需要 Main 方法。您只需要:

public class Application extends SpringBootServletInitializer {

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

但是,如果您希望在开发或 build an executable jar or a war 可以 运行 独立于 Spring Boot 的嵌入式 tomcat 只需 java -jar myapp.war 命令,入口点 class 和 main 方法可能会有帮助。

在 Spring Boot 中,基本上需要三样东西:

1) 使用@SpringBootApplication注解

2) 扩展 SpringBootServletInitializer

3) 覆盖如上所示的配置方法

就是这样!