Spring.Shell.History内置命令覆盖

这篇具有很好参考价值的文章主要介绍了Spring.Shell.History内置命令覆盖。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

最近工作上遇到的一个小问题,在Spring Shell中,我们可以自己定义一些命令,以完成我们想要的功能,也可以使用内置命令如help、history、clear。但当一些内置命令达不到我们想要的功能时,就需要对其进行重写/覆盖。如本次遇到的histroy命令,history是一个Shell内置命令,用于查看在Shell中执行过的历史命令,其输出显示的格式是一个List列表,所有命令在一行:如[“help”,“version”,“quit”],这种格式不太美观,所以我想要其按每一条命令一行的格式输出,就需要对其进行覆盖。文章来源地址https://www.toymoban.com/news/detail-807808.html

解决方案

覆盖方法

  1. 实现History.Command 接口。类路径:org.springframework.shell.standard.commands.History
  2. 添加注解@ShellCommandGroup(“Built-In Commands”), 表示这个是一个内置命令。
  3. 直接复用History中的history方法,保留其原有功能,在这个基础上,将命令每个一行输出。

重写的History代码

import org.springframework.shell.standard.commands.History;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

@ShellComponent
@ShellCommandGroup("Built-In Commands")
public class MyHistory implements History.Command {
    private org.jline.reader.History jLineHistory = null;

    public MyHistory(org.jline.reader.History jLineHistory) {
        this.jLineHistory = jLineHistory;
    }
    
	// 函数名要保持不变
    @ShellMethod(value = "Display or save the history of previously run commands")
    public String history(@ShellOption(help = "A file to save history to.", defaultValue = ShellOption.NULL) File file) throws IOException {
        StringBuffer buffer = new StringBuffer();
        if (file == null) {
            jLineHistory.forEach(line -> buffer.append(line).append("\n")); //每个命令一行
            return buffer.toString();
        } else {
            try (FileWriter w = new FileWriter(file)) {
                for (org.jline.reader.History.Entry entry : jLineHistory) {
                    w.append(entry.line()).append(System.lineSeparator());
                }
            }
            return String.format("Wrote %d entries to %s", jLineHistory.size(), file);
        }
    }
}

History 源码

@ShellComponent
public class History {

    private final org.jline.reader.History jLineHistory;

    public History(org.jline.reader.History jLineHistory) {
        this.jLineHistory = jLineHistory;
    }

    public interface Command {
    }

    @ShellMethod(value = "Display or save the history of previously run commands")
    public List<String> history(@ShellOption(help = "A file to save history to.", defaultValue = ShellOption.NULL) File file) throws IOException {
        if (file == null) {
            List<String> result = new ArrayList<>(jLineHistory.size());
            jLineHistory.forEach(e -> result.add(e.line()));
            return result;
        } else {
            try (FileWriter w = new FileWriter(file)) {
                for (org.jline.reader.History.Entry entry : jLineHistory) {
                    w.append(entry.line()).append(System.lineSeparator());
                }
            }
            return Collections.singletonList(String.format("Wrote %d entries to %s", jLineHistory.size(), file));
        }
    }
}

yaml配置:指定保存历史命令文件的路径

spring:
  main:
    banner-mode: CONSOLE
  shell:
    interactive:
      enabled: true
    history:
      name: log/history.log

到了这里,关于Spring.Shell.History内置命令覆盖的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Security内置过滤器详解

    相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现GitHub快捷登录 Spring Security的过滤器链机制 Spring Security OAuth Client配置加载源码分析 根据前面的示例,我们已经知道启动时会加载18个过滤器,并且已经知道了请求会匹配到DefaultSecurityF

    2024年02月05日
    浏览(47)
  • Spring高手之路4——深度解析Spring内置作用域及其在实践中的应用

    我们来看看 Spring 内置的作用域类型。在 5.x 版本中, Spring 内置了六种作用域: singleton :在 IOC 容器中,对应的 Bean 只有一个实例,所有对它的引用都指向同一个对象。这种作用域非常适合对于无状态的 Bean ,比如工具类或服务类。 prototype :每次请求都会创建一个新的 Be

    2024年02月08日
    浏览(39)
  • 深入理解 Spring Boot 内置工具类:ReflectionUtils

    🎉欢迎来到架构设计专栏~深入理解 Spring Boot 内置工具类:ReflectionUtils ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限

    2024年02月20日
    浏览(44)
  • Java 设计者模式以及与Spring关系(七) 命令和迭代器模式

    本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道 设计者模式 有 3 类 23 种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。 (1)创建

    2024年01月24日
    浏览(34)
  • spring使用内置jetty创建提供http接口服务

    通过mvc:annotation-driven/配置,Spring MVC会启用对注解的支持,使得可以在控制器类和方法上使用注解来定义请求映射、参数绑定等操作。 具体来说,mvc:annotation-driven/会启用以下功能: 支持@Controller注解,用于标识控制器类 支持@RequestMapping注解,用于定义请求映射 支持@RequestP

    2024年04月15日
    浏览(40)
  • 【宝藏系列】几款好用的 Spring Boot 内置工具类

    断言是一个逻辑判断,用于检查不应该发生的情况 Assert 在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启 SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查 获取对象的基本信息 判断工具 其他工具方法 字符串判断工具 字符串操作工具 路径相关工具方法

    2024年02月14日
    浏览(41)
  • Spring Boot 工程开发常见问题解决方案,日常开发全覆盖

    本文是 SpringBoot 开发的干货集中营,涵盖了日常开发中遇到的诸多问题,通篇着重讲解如何快速解决问题,部分重点问题会讲解原理,以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题,既方便自己也方便他人,老鸟和新手皆适合,值得收藏 😄 https://mvnrepo

    2024年03月27日
    浏览(62)
  • Spring Cloud Gateway内置的断言和过滤器作用

    对应版本3.1.7对应SpringCloud版本2021.0.7 AfterRoutePredicateFactory 作用:判断当请求时间是否在指定配置时间之后 使用方式 使用场景:当上线一新服务时在未来某个时间提供服务 两种配置方式的区别: 第一种便捷方式配置的值是按逗号分隔,再按shortcutFieldOrder方法返回的字段顺序

    2024年02月06日
    浏览(48)
  • 第九章 : Spring cloud 网关中心 Gateway (内置断言与自定义断言)

    第九章 : Spring cloud 网关中心 Gateway (内置断言与自定义断言) 前言 本章知识点:Spring cloud Gateway 内置断言(Predicate)类型的 yaml 和 json 数据格式;自定义路由Predicate 断言的案例。 Gateway 内置 Predicate 格式配置 概述 本文针对 Spring Cloud Gateway 框架中断言(Predicate)类型在 Yaml

    2024年01月17日
    浏览(36)
  • 38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

    ▲ 默认的四个静态资源目录: /META-INF/resources /resources /static /public ▲ ResourceProperties.java类的源代码,可看到CLASSPATH_RESOURCE_LOCATIONS常量的定义: CLASSPATH_RESOURCE_LOCATIONS = new String[]{“classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/”}; 这意味

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包