java - 如何将 spring boot 应用程序作为 Web 应用程序和命令行应用程序运行?

标签 java eclipse spring-boot command-line-arguments

目前,我正在尝试使用 CommandLineRunnerConfigurableApplicationContext 来默认将 spring boot 应用程序作为 Web 应用程序和作为独立的命令行应用程序运行按需(通过某种命令行参数)。我正在努力弄清楚如何在提供程序参数时将其作为控制台应用程序单独运行。请提出任何建议。

最佳答案

我有同样的要求。这就是我实现它的方式:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class);
        if (args.length == 0) { // This can be any condition you want
            app.web(WebApplicationType.SERVLET);
        } else {
            app.web(WebApplicationType.NONE);
        }
        app.run(args);
    }
}

这是一个控制台应用程序运行器。

@Component
@ConditionalOnNotWebApplication
public class ConsoleApplication implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("************************** CONSOLE APP *********************************");
    }
}

当你构建你的bootJar时,你可以使用 java -jar app.jar 并作为命令行应用使用 java -jar app.jar #based on the condition you specified anything

希望这对您有所帮助。

编辑:

实现此目的的更好方法是如下所示更改 Application.java 并保留 ConsoleApplication.java,如上所示。

@SpringBootApplication
public class Application {

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

然后使用 java -jar -Dspring.main.web-application-type=NONE app.jar 运行您的 bootJar 将作为控制台应用程序运行该应用程序。不传递任何 spring.main.web-application-type 将作为 Web 应用程序运行。

关于java - 如何将 spring boot 应用程序作为 Web 应用程序和命令行应用程序运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615729/

相关文章:

java - 关键监听器在 JApplet 中不起作用

java - 将 Java 变量传递给 jQuery 函数的 JavascriptExecutor 参数

java - Constructor.newInstance() 在 JUnit 中与实际运行时的行为不同

java - 部署到 Heroku 中的 java Spark 项目的文件路径

c++ - 是否有提供 C++ <Thread> 支持的 IDE?

spring-boot - 使用多个主类运行 spring boot

java - 录制声音,然后在Android上使用/保存声音

java - Eclipse 动态 Web 项目中缺少 WEB-INF 文件

java - JPA 标准规范 - 使用 group by 进行多选返回所有列

java - 在 Java 项目中的 Gradle 中定义常量