我在創(chuàng)建 REST 服務(wù)器或 Picocli CLI 應(yīng)用程序時沒有問題。但是,如果我想在一個應(yīng)用程序中同時擁有這兩者怎么辦?問題是,我想要一個通過 REST 服務(wù)器提供一些業(yè)務(wù)邏輯的應(yīng)用程序(這沒問題),但在其他一些情況下,我想通過 CLI 觸發(fā)業(yè)務(wù)邏輯而不啟動 HTTP 服務(wù)器(例如,對于 CI/CD ).我不確定如果我通過啟動應(yīng)用程序 PicocliRunner.run(Application.class, args)并且是否給出了特定參數(shù)運行服務(wù)器是否會遇到問題Micronaut.run(Application.class);,因為它們創(chuàng)建了不同的上下文。有誰知道實現(xiàn)這一目標的正確方法?這就是我解決它的方法: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條經(jīng)驗 獲得超7個贊
實現(xiàn)此目的的一種方法是@Inject
進入ApplicationContext
您的@Command
-annotated 類。這允許您的命令使用相同的應(yīng)用程序上下文,而不是需要啟動一個單獨的應(yīng)用程序上下文。
然后,在您的方法中,您可以通過從應(yīng)用程序上下文run
獲取并調(diào)用它來啟動 REST 服務(wù)器,或者您可以在沒有 REST 服務(wù)器的情況下直接執(zhí)行該功能。EmbeddedServer
start
添加回答
舉報
0/150
提交
取消