Execution

This section describes how to set up a Spring Shell to work in interactive mode.spring-doc.cn

Interaction Mode

Version 2.1.x introduced built-in support to distinguish between interactive and non-interactive modes. This makes it easier to use the shell as a simple command-line tool without requiring customization.spring-doc.cn

Currently, interactive mode is entered if any command line options are passed when starting or running a shell from a command line. This works especially well when a shell application is compiled with Native Support.spring-doc.cn

Some commands may not have any useful meanings when they run in interactive mode or (conversely) in non-interactive mode. For example, a built-in exit command would have no meaning in non-interactive mode, because it is used to exit interactive mode.spring-doc.cn

The @ShellMethod annotation has a field called interactionMode that you can use to inform shell about when a particular command is available.spring-doc.cn

Shell Runners

ShellApplicationRunner is a main interface where Boot’s ApplicationArguments are passed and its default implementation makes a choice which ShellRunner is used. There can be only one ShellApplicationRunner but it can be redefined if needed for some reason.spring-doc.cn

Three ShellRunner implementation exists, named InteractiveShellRunner, NonInteractiveShellRunner and ScriptShellRunner. Only NonInteractiveShellRunner is enabled by default. Enabled state can be modified using properties spring.shell.interactive.enabled, spring.shell.noninteractive.enabled and spring.shell.script.enabled respecively.spring-doc.cn

For example enabling interactive and script runners use properties:spring-doc.cn

spring:
  shell:
    interactive:
      enabled: true
    script:
      enabled: true
Versions up to 3.2.x had all runners enabled by default, starting from 3.3.x only NonInteractiveShellRunner is enabled by default.

Starting from 3.3.x a ShellRunner interface has a new method:spring-doc.cn

default boolean run(String[] args) throws Exception {
  return false;
}
This will the main api going forward and other existing methods taking boot’s ApplicationArguments has been deprecated and will be removed in future.