我在创建 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
}
}
}
qq_笑_17
相关分类