返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot之自定义Banner详解
  • 988
分享到

SpringBoot之自定义Banner详解

2024-04-02 19:04:59 988人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

1、在线生成banner网站 https://www.bootschool.net/ascii Http://www.network-science.de/ascii/ http

1、在线生成banner网站


https://www.bootschool.net/ascii
Http://www.network-science.de/ascii/
http://patorjk.com/software/taag/
http://www.degraeve.com/img2txt.PHP

2、两种自定义Banner方式

在自定义Banner之前,先剖析一下源码,源码跟踪解析如下:


public static void main(String[] args) {
		springApplication springApplication = new SpringApplication(Application.class);
		//开启Banner打印方式(OFF:关闭,CONSOLE:控制台输出,LOG:日志输出)
		springApplication.setBannerMode(Mode.LOG);
		springApplication.run(args);
	}
  • SpringApplication.printBanner():

private Banner printBanner(ConfigurableEnvironment environment) {
       //是否开启Banner模式
        if (this.bannerMode == Mode.OFF) {
            return null;
        } else {
            ResourceLoader resourceLoader = this.resourceLoader != null ? this.resourceLoader : new DefaultResourceLoader((ClassLoader)null);
            SpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter((ResourceLoader)resourceLoader, this.banner);
            return this.bannerMode == Mode.LOG ? bannerPrinter.print(environment, this.mainApplicationClass, logger) : bannerPrinter.print(environment, this.mainApplicationClass, System.out);
        }
    }
  • SpringApplicationBannerPrinter.print()

Banner print(Environment environment, Class<?> sourceClass, Log logger) {
	   //调用getBanner()方法
        Banner banner = this.getBanner(environment);
        try {
            logger.info(this.createStringFromBanner(banner, environment, sourceClass));
        } catch (UnsupportedEncodingException var6) {
            logger.warn("Failed to create String for banner", var6);
        }
        return new SpringApplicationBannerPrinter.PrintedBanner(banner, sourceClass);
    }
  • SpringApplicationBannerPrinter.getBanner()

private Banner getBanner(Environment environment) {
    SpringApplicationBannerPrinter.Banners banners = new SpringApplicationBannerPrinter.Banners();
    //先获取image类型的banner
    banners.addIfNotNull(this.getImageBanner(environment));
    //在获取text类型的banner
    banners.addIfNotNull(this.getTextBanner(environment));
    if (banners.hasAtLeastOneBanner()) {
        // 如果至少有一个,则返回
        // Banners 也实现了 Banner 接口,运用了组合模式,实际上可同时打印图片和文本 banner。
        return banners;
    } else {
         // 返回自定义的banner(this.fallbackBanner) 或者 springboot默认的banner(DEFAULT_BANNER)
         // 默认的banner类:SpringBootBanner。
         // 自定义的banner:需要我们仿照SpringBootBanner去自定义一个类
         
         //this.fallbackBanner: 表示自定义的banner,此参数可在springboot启动类的main方法中设置,后续会介绍
         
         //   public static void main(String[] args) {
         //        SpringApplication springApplication = new SpringApplication(Application.class);
         //        springApplication.setBanner(new MyBanner());//自定义的banner
         //        springApplication.run(args);
         //   }
        
          return this.fallbackBanner != null ? this.fallbackBanner : DEFAULT_BANNER;
    }
}

解释:banner的获取方式有两种,先获取image类型的banner,然后获取text类型的banner,如果至少有一个,则执行该banner,如果没有,返回自定义的banner,如果自定义也没有,则返回默认

那么上述源码中是如何获取image类型和Text类型的banner呢?
SpringApplicationBannerPrinter.getImageBanner()
SpringApplicationBannerPrinter.getTextBanner()


//获取Text类型的banner
private Banner getTextBanner(Environment environment) {
    //先从spring.banner.location路径中去取,如果没有,默认banner.txt
    String location = environment.getProperty("spring.banner.location", "banner.txt");
    Resource resource = this.resourceLoader.getResource(location);
    try {
        if (resource.exists() && !resource.getURL().toExternalFORM().contains("liquibase-core")) {
            return new ResourceBanner(resource);
        }
    } catch (IOException var5) {}
    return null;
}

//获取image类型的banner
private Banner getImageBanner(Environment environment) {
    String location = environment.getProperty("spring.banner.image.location");
    if (StringUtils.hasLength(location)) {
        Resource resource = this.resourceLoader.getResource(location);
        return resource.exists() ? new ImageBanner(resource) : null;
    } else {
        String[] var3 = IMAGE_EXTENSION;
        int var4 = var3.length;
        for(int var5 = 0; var5 < var4; ++var5) {
            String ext = var3[var5];
            Resource resource = this.resourceLoader.getResource("banner." + ext);
            if (resource.exists()) {
                return new ImageBanner(resource);
            }
        }
        return null;
    }
}

基于图片的 banner

  • 可通过配置参数 spring.banner.image.location 来指定
  • 可将名为 “banner.jpg” (哪几种类型取决于ext常量的定义) 的文件放在classpath 目录(src/main/resources)

基于文件的 banner

  • 可通过配置参数 spring.banner.location 来指定
  • 可将名为 “banner.txt” 的文件放在 classpath 目录(src/main/resources)

源码分析完毕,那么如何去自定义呢?

第一种:配置方式(直接在properties或yml文件中进行配置)
即配置 spring.banner.image.location 和 spring.banner.location路径
或者
将 “图片” 和 “banner.txt” 放在classpath 目录中


spring.banner.location=classpath:banner1.png
spring.banner.image.margin=2
spring.banner.image.height=76
spring.banner.charset=UTF-8
spring.banner.image.invert=false
spring.banner.image.location=banner1.png
spring.main.banner-mode=console
spring.main.show-banner=true

第二种:自定义banner


import org.springframework.boot.Banner;
import org.springframework.boot.ansi.AnsiColor;
import org.springframework.boot.ansi.AnsiOutput;
import org.springframework.boot.ansi.AnsiStyle;
import org.springframework.core.env.Environment;
import java.io.PrintStream;

public class MyBanner implements Banner {

    private static final String[] BANNER = new String[]{"", "  .   ____          _            __ _ _", " /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\", "( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\", " \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )", "  '  |____| .__|_| |_|_| |_\\__, | / / / /", " =========|_|==============|___/=/_/_/_/"};

    public MyBanner() {
    }

    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        String[] bannerArray = BANNER;
        int bannerLength = bannerArray.length;
        for(int i = 0; i < bannerLength; ++i) {
            String line = bannerArray[i];
            out.println(line);
        }
        out.println(AnsiOutput.toString(new Object[]{AnsiColor.GREEN, " :: Spring Boot :: ", AnsiColor.DEFAULT,  AnsiStyle.FAINT}));
        out.println();
    }
}

如何使用自定义Banner?
springboot启动类中添加自定义banner


@SpringBootApplication
public class Application extends SpringBootServletInitializer {
   public static void main(String[] args) {
      SpringApplication springApplication = new SpringApplication(Application.class);
      //添加自定义banner
      springApplication.setBanner(new MyBanner());
      springApplication.run(args);
   }
}

如果不想打印banner,可以在启动类的main中,设置 springApplication.setBannerMode(Banner.Mode.OFF);
或者
通过参数配置spring.main.banner-mode=off来关闭banner的打印

3、控制banner样式

Spring提供了三个枚举类来设定字符的颜色,分别是:


AnsiColor: 用来设定字符的前景色
AnsiBackground: 用来设定字符的背景色
AnsiStyle: 用来控制加粗、斜体、下划线等等。

4、显示应用信息

除了上面的指定样式之外,还可以显示一些与应用相关的版本信息:


${application.version}   与 MANIFEST.MF文件中相同的版本号,比如1.5.4.RELEASE
${application.formatted-version}   格式化过的版本号就是加个v然后用括号包起来,比如(v1.5.4.RELEASE)
${application.title} 
${spring-boot.version} Spring Boot的版本
${spring-boot.formatted-version} 格式化过的版本

到此这篇关于SpringBoot之自定义Banner详解的文章就介绍到这了,更多相关SpringBoot之自定义Banner内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot之自定义Banner详解

本文链接: https://lsjlt.com/news/135340.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot之自定义Banner详解
    1、在线生成banner网站 https://www.bootschool.net/ascii http://www.network-science.de/ascii/ http...
    99+
    2024-04-02
  • Springboot应用如何自定义Banner
    Springboot应用如何自定义Banner,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这个小功能据说是Springboot2.x的小...
    99+
    2024-04-02
  • Springboot中如何自定义Banner图案
    这篇文章给大家介绍Springboot中如何自定义Banner图案,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言我们在启动 Spring Boot 项目时,默认会在控制台打印 Spring logo 和版本等信...
    99+
    2023-06-15
  • 教你怎么用Springboot自定义Banner图案
    目录一、前言二、实现原理三、默认 Banner 实现类四、ImageBanner五、ResourceBanner六、SpringBootBanner七、实现 Banner 类八、Ba...
    99+
    2024-04-02
  • SpringBoot 自定义注解之脱敏注解详解
    目录自定义注解之脱敏注解一、脱敏后的效果二、代码1.脱敏注解2.定义脱敏类型3.敏感工具类4.脱敏序列化信息小结一下自己手写的一个高效自定义字符串脱敏注解自己写了个 仅供参考自定义注...
    99+
    2024-04-02
  • 使用SpringBoot自定义starter详解
    目录一、新建一个工程二、xxx-sprig-boot-starter-configure模块自动配置编码2.1 服务层编码2.2 属性配置类编码2.3 starter自动配置类编码2...
    99+
    2024-04-02
  • 详解SpringBoot如何自定义Starter
    目录阅读收获本章源码下载什么是Starter为什么使用StarterSpringboot自动配置spring.factoriesStarter开发常用注解Full全模式和Lite轻量...
    99+
    2024-04-02
  • SpringBoot自定义MessageConvert详细讲解
    目录前言原理实现拓展前言 对于页面携带的请求头中的AcceptSpringBoot有对应的10种MessageConvert可以支持写出对应的媒体类型,比如application/x...
    99+
    2023-01-11
    SpringBoot MessageConvert SpringBoot自定义MessageConvert
  • Android自定义封装banner组件
    自定义封装 banner 组件,供大家参考,具体内容如下1. 效果图预览 2.基本功能一个简单方便的轮播图组件,基于viewpager 基础上进行的封装。可设置 项目中图片,网络图片, View;支持循环自动播放,手势滑动切换,i...
    99+
    2023-05-31
    android banner 组件
  • SpringBoot详解Banner的使用
    Banner的设置方式有以下几种 1、默认:SpringBoot + 版本号; 2、添加自定义资源文件:banner.txt; 3、添加自定义资源文件:banner.jpg/png/...
    99+
    2024-04-02
  • SpringBoot自定义注解之实现AOP切面日志详解
    通过自定义注解的方式(如:@SysLog(obj = "操作对象", text = "操作内容"),在 SpringBoot 中来实现 AOP...
    99+
    2024-04-02
  • SpringBoot详解自定义Stater的应用
    目录1、SpringBoot starter机制2、为什么要自定义starter3、自定义starter的命名规则4、使用自定义starter1、SpringBoot starter...
    99+
    2024-04-02
  • SpringBoot项目启动时增加自定义Banner的简单方法
    目录前言制作Banner总结前言 最近有小伙伴推荐给博客启动的时候加上自定义Banner,开始我还不太明白他说的是那部分,后面给我发了这样一个文件,陌溪瞬间就懂了 /////////...
    99+
    2024-04-02
  • SpringBoot应用自定义logback日志详解
    目录概述logback配置详解配置内容概念介绍配置介绍SpringBoot中自定义logback多环境输出日志文件读取配置文件配置概述 默认情况下,SpringBoot内部使用log...
    99+
    2024-04-02
  • SpringBoot自定义Starter实现流程详解
    目录starter起步依赖starter命名规则自定义starternew module添加依赖simplebean自动配置类META-INF\spring.factories在sp...
    99+
    2024-04-02
  • Spring Boot之FilterRegistrationBean-自定义Filter详解
    Spring Boot之FilterRegistrationBean-自定义Filter 项目老的用spring写的,新的升级到了springboot,原代码中有在web.xml中定...
    99+
    2024-04-02
  • 详解SpringBoot自定义配置与整合Druid
    目录SpringBoot配置文件优先级yaml的多文档配置扩展SpringMVC添加自定义视图解析器自定义DruidDataSourcesAbout Druid添加依赖配置数据源其他...
    99+
    2024-04-02
  • SpringBoot自定义错误处理逻辑详解
    目录1. 自定义错误页面2. @ControllerAdvice+@ExceptionHandler3. 使用@ResponseStatus处理自定义异常4. 框架底层异常5. 自定...
    99+
    2022-11-13
    SpringBoot错误处理逻辑 SpringBoot错误处理
  • SpringBoot之自定义Schema扩展方式
    目录SpringBoot 自定义Schema扩展1. 配置ServiceConfig属性2. 编写XSD文件3. 编写NamespaceHandler4. 编写BeanDefinit...
    99+
    2024-04-02
  • Python学习之自定义异常详解
    目录自定义抛出异常关键字 - raise演示小案例 - 1演示小案例 - 2自定义异常类总结在上一章我们学习了 异常的三个关键字,分别是try、except 以及 finally。我...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作