gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:00 25 4
gpt4 key购买 nike

我在创建 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
}
}
}

最佳答案

实现此目的的一种方法是将 @Inject ApplicationContext 到您的 @Command 注解的类中。这允许您的命令使用相同的应用程序上下文,而无需启动单独的应用程序上下文。

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

另请参阅此答案以了解更多详细信息:https://stackoverflow.com/a/56751733/1446916

关于java - 实现 cli 应用程序的适当方法,该应用程序也使用 Micronaut 的服务配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57559070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com