Gui*_*lty 4 java spring maven spring-boot picocli
我必须将大型 Spring boot 应用程序转换为灵活的 CLI 工具,其中 Spring boot 应用程序发送的请求(除其他外)由命令行中的用户输入确定。我决定使用 picocli 来实现命令行功能,但是我不知道如何做一些简单的事情,例如如果用户传递给定的选项标志,将一些文本打印到 stdout,Spring boot 只是像平常一样运行。我应该如何写这个以便 picocli 可以与 Spring boot 一起运行(并最终控制所有 Spring boot 的东西)
作为后续工作,我最终通过将“控制器方法”重构为 3 个来使代码正常工作,如下所示:
|
|_ MainApp.java
|_ CmdRunner.java
|_TheCommand.java
其中 MainApp@SpringBootApplication基本上就是这样做的:
System.exit(SpringApplication.exit(new SpringApplication(MainApp.class).run(args)));
Run Code Online (Sandbox Code Playgroud)
把一切都踢掉。
CmdRunner是SpringBoot提供的接口@Component的简单实现CommandLineRunner,最重要的部分如下:
@Autowired
private TheCommand theCommand;
@Override
public void run(String... args) {
new CommandLine(theCommand).execute(args);
}
Run Code Online (Sandbox Code Playgroud)
它在新的 picocli 对象上执行传递的 cli 参数(从 MainApp.java 传递给它)CommandLine。这将我们带到最后一个类,它同时是实现该接口TheCommand.java的 picocli@Command和 Springboot 。本质上只包含我需要提供的所有逻辑和(不断增长的)功能。@ControllerRunnable
此实现的唯一缺点是,当用户使用该--help标志运行它时,应用程序仍然运行 Spring Boot 内容,使其在特定场景中有点无响应。
| 归档时间: |
|
| 查看次数: |
4173 次 |
| 最近记录: |