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,如果自定义也没有,则返回默认