执行

本节描述了如何设置 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 的现有方法已被弃用,并将在未来移除。