SpringShell 2.0 共为我们提供了五个内置命令, 如果不想使用, 那么可以禁用内置命令. 笔者并不推荐修改SpringSell内置命令的默认行为, 但是不妨了解一下.
禁用所有内置命令, 可以直接修改maven依赖, 不引入内置命令的包即可. 需要注意的是, 这种方式连程序退出命令也会禁用, 只能通过杀进程方式停止应用.
<dependency>
<groupId>org.springframework.shell</groupId>
<artifactId>spring-shell-starter</artifactId>
<version>2.0.0.RELEASE</version>
<!-- 不引入任何内置命令-->
<exclusions>
<exclusion>
<groupId>org.springframework.shell</groupId>
<artifactId>spring-shell-standard-commands</artifactId>
</exclusion>
</exclusions>
</dependency>
禁用特定的内置命令, 可以通过设置SpringBoot 应用启动参数来实现, 可以写死在应用中, 也可以启动应用时指定. 笔者直接写死在应用中.
@SpringBootApplication
public class SpringShellApplication {
public static void main(String[] args) {
// 指定禁用内置命令列表
String[] disableCmds = new String[]{
"--spring.shell.command.clear.enabled=false",
"--spring.shell.command.stacktrace.enabled=false"
};
// 重新拼接启动参数
String[] fullArgs = StringUtils.concatenateStringArrays(args, disableCmds);
// 启动应用
SpringApplication.run(SpringShellApplication.class, fullArgs);
}
}
通过help查看内置命令, 会发现内置命令缺少了stacktrace 和 clear命令.
shell:>help
AVAILABLE COMMANDS
Built-In Commands
exit, quit: Exit the shell.
help: Display help about available commands.
script: Read and execute commands from a file.
shell:>clear
No command found for 'clear'
shell:>stacktrace
No command found for 'stacktrace'