執行

本節描述瞭如何設定 Spring Shell 以在互動模式下工作。

互動模式

版本 2.1.x 引入了內建支援來區分互動模式和非互動模式。這使得將 shell 用作簡單的命令列工具而無需定製變得更容易。

當前,如果在從命令列啟動或執行 shell 時傳遞了任何命令列選項,就會進入互動模式。當 shell 應用程式使用 原生支援 編譯時,這種方式尤其適用。

某些命令在互動模式下或(反之)非互動模式下執行時可能沒有任何有用的意義。例如,內建的 exit 命令在非互動模式下就沒有意義,因為它用於退出互動模式。

@ShellMethod 註解有一個名為 interactionMode 的欄位,您可以使用它來告知 shell 某個特定命令何時可用。

Shell 執行器

ShellApplicationRunner 是一個主介面,透過它傳遞 Boot 的 ApplicationArguments,其預設實現會選擇使用哪個 ShellRunner。只能有一個 ShellApplicationRunner,但如果出於某種原因需要,可以重新定義它。

存在三種 ShellRunner 實現,分別命名為 InteractiveShellRunnerNonInteractiveShellRunnerScriptShellRunner。預設情況下只有 NonInteractiveShellRunner 是啟用的。可以使用屬性 spring.shell.interactive.enabledspring.shell.noninteractive.enabledspring.shell.script.enabled 分別修改啟用狀態。

例如,啟用互動式和指令碼執行器可以使用以下屬性

spring:
  shell:
    interactive:
      enabled: true
    script:
      enabled: true
直到 3.2.x 版本,所有執行器預設都是啟用的,從 3.3.x 版本開始,預設只啟用了 NonInteractiveShellRunner

3.3.x 版本開始,ShellRunner 介面有了一個新方法

default boolean run(String[] args) throws Exception {
  return false;
}
這將是未來的主要 API,其他接受 Boot 的 ApplicationArguments 的現有方法已被棄用,並將在未來移除。