为了账号安全,请及时绑定邮箱和手机立即绑定

实现 cli 应用程序的适当方法,该应用程序也使用 Micronaut 的服务配置文件

实现 cli 应用程序的适当方法,该应用程序也使用 Micronaut 的服务配置文件

蝴蝶刀刀 2023-06-14 11:13:47
我在创建 REST 服务器或 Picocli CLI 应用程序时没有问题。但是,如果我想在一个应用程序中同时拥有这两者怎么办?问题是,我想要一个通过 REST 服务器提供一些业务逻辑的应用程序(这没问题),但在其他一些情况下,我想通过 CLI 触发业务逻辑而不启动 HTTP 服务器(例如,对于 CI/CD ).我不确定如果我通过启动应用程序 PicocliRunner.run(Application.class, args)并且是否给出了特定参数运行服务器是否会遇到问题Micronaut.run(Application.class);,因为它们创建了不同的上下文。有谁知道实现这一目标的正确方法?这就是我解决它的方法:import io.micronaut.configuration.picocli.PicocliRunner;import io.micronaut.runtime.Micronaut;import picocli.CommandLine.Command;import picocli.CommandLine.Parameters;@Command(        name = "RestAndCliExample",        description = "...",        mixinStandardHelpOptions = true)public class Application implements Runnable {    private enum Mode {serve, run}    @Parameters(index = "0", description = "Execution mode: ${COMPLETION-CANDIDATES}")    private Mode mode;    public static void main(String[] args) throws Exception {        args = new String[]{"run"};        PicocliRunner.run(Application.class, args);    }    public void run() {        if (Mode.serve.equals(mode)) {            // Start REST API            Micronaut.run(Application.class);        } else {            // TODO run code directly        }    }}
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

实现此目的的一种方法是@Inject进入ApplicationContext您的@Command-annotated 类。这允许您的命令使用相同的应用程序上下文,而不是需要启动一个单独的应用程序上下文。

然后,在您的方法中,您可以通过从应用程序上下文run获取并调用它来启动 REST 服务器,或者您可以在没有 REST 服务器的情况下直接执行该功能。EmbeddedServerstart

查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信