跳到主要内容

执行

ChatGPT-4o-mini 中英对照 Execution

本节描述了如何设置 Spring Shell 以在交互模式下工作。

交互模式

版本 2.1.x 引入了内置支持,以区分交互模式和非交互模式。这使得将 shell 作为简单的命令行工具使用变得更加容易,而无需进行自定义。

目前,如果在从命令行启动或运行 shell 时传递了任何命令行选项,则会进入交互模式。当 shell 应用程序使用 Native Support 编译时,这种方式尤其有效。

某些命令在交互模式下运行时可能没有任何有用的意义,或者(相反)在非交互模式下运行时也没有意义。例如,内置的 exit 命令在非交互模式下没有意义,因为它用于退出交互模式。

@ShellMethod 注解有一个名为 interactionMode 的字段,您可以使用它来通知 shell 何时某个特定命令可用。

Shell Runners

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
yaml
备注

版本 3.2.x 及之前的所有运行器默认启用,从 3.3.x 开始,只有 NonInteractiveShellRunner 默认启用。

3.3.x 开始,ShellRunner 接口新增了一个方法:

default boolean run(String[] args) throws Exception {
return false;
}
java
important

这将是未来的主要 API,其他现有方法使用 boot 的 ApplicationArguments 已被弃用,并将在未来移除。