执行
本节介绍如何设置 Spring Shell 以在交互模式下工作。
交互模式
版本 2.1.x 引入了内置支持来区分交互模式和非交互模式。这使得将 Shell 作为简单的命令行工具变得更容易,无需任何自定义。
当前,如果在从命令行启动或运行 Shell 时传递任何命令行选项,则会进入交互模式。当使用 原生支持 编译 Shell 应用程序时,此功能特别有用。
某些命令在交互模式下或(反之)非交互模式下运行时可能没有任何有意义的用途。例如,内置的 exit
命令在非交互模式下将毫无意义,因为它用于退出交互模式。
@ShellMethod
注解有一个名为 interactionMode
的字段,您可以使用它来告知 Shell 特定命令何时可用。
Shell 运行器
ShellApplicationRunner
是 Boot 的 ApplicationArguments
传递的主要接口,其默认实现会选择使用哪个 ShellRunner
。只能有一个 ShellApplicationRunner
,但如果出于某种原因需要,可以重新定义它。
存在三个 ShellRunner
实现,分别命名为 InteractiveShellRunner
、NonInteractiveShellRunner
和 ScriptShellRunner
。默认情况下,只有 NonInteractiveShellRunner
已启用。可以使用属性 spring.shell.interactive.enabled
、spring.shell.noninteractive.enabled
和 spring.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 的现有方法已被弃用,并将在将来移除。 |