目前,我正在尝试使用 CommandLineRunner
和 ConfigurableApplicationContext
来默认将 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/