執行

本節說明如何設定 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 的方法已被棄用,並將在未來版本中移除。