如果我使用Spring Boot开发Web应用程序作为战争,为什么我需要main方法?

bra*_*orm 13 spring spring-mvc spring-boot

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

我注意到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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Nay*_*try 14

构建战争并将其放置在Tomcat的webapps文件夹中的典型部署方案不需要主方法.所有你需要的是:

public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
} 
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望能够在IDE中启动应用程序(例如使用Eclipse的运行方式 - > Java应用程序),同时开发或构建可执行jar或可以通过java -jar myapp.war命令单独使用Spring Boot的嵌入式tomcat运行的war,带有main方法的入口点类可能会有所帮助.


Far*_*ook 5

在单独的 Web 容器中运行

您不需要 main 方法,您所需要做的就是SpringBootServletInitializerKryger提到的那样进行扩展。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
....
....
Run Code Online (Sandbox Code Playgroud)

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

这里您需要 main 方法,以便您可以java -jar从命令行运行它。

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

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