This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Shell 3.4.0! |
Execution
This section describes how to set up a Spring Shell to work in interactive mode.
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.
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.
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.
The @ShellMethod
annotation has a field called interactionMode
that you can use to inform
shell about when a particular command is available.
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.
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.
For example enabling interactive and script runners use properties:
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:
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.
|