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