• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot之自定义Banner详解

springboot 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论
文章目录[隐藏]

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之前,先剖析一下源码,源码跟踪解析如下:

  • SpringBoot启动的main方法
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(enviro<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>nment));
    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,如果自定义也没有,则返回默认


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot之自定义Banner详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址