springboot-------1、如何定制Banner

当一个SpringBoot程序运行时,首先会在控制窗口中产生一个图片一样的图案

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::   v2.6.7

在个样子的图形其实是可以换的,那么应该如何置换呢?

一、定制Banner

springboot为我们提供了两种方法:
1、在resource文件夹下,添加一个banner.txt的文件,就行了,然后你可以在其中定制你想要的样式
在这里插入图片描述2、通过在配置文件中配置

spring.banner.location=static/banner.txt

在这里插入图片描述

二、原理分析

1、在主启动程序中,run方法中会为我们加载Banner信息

public ConfigurableApplicationContext run(String... args) {
			.................省略.......................
			Banner printedBanner = printBanner(environment);
			.................省略.......................
		}

2、调用printBanner方法

private Banner printBanner(ConfigurableEnvironment environment) {
//首先会判断是否开启了该功能,若没开启,就会返回null
		if (this.bannerMode == Banner.Mode.OFF) {
			return null;
		}
		ResourceLoader resourceLoader = (this.resourceLoader != null) ? this.resourceLoader
				: new DefaultResourceLoader(null);
		SpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter(resourceLoader, this.banner);
		if (this.bannerMode == Mode.LOG) {
			return bannerPrinter.print(environment, this.mainApplicationClass, logger);
		}
		//这里是向控制台输出的主要方法
		return bannerPrinter.print(environment, this.mainApplicationClass, System.out);
	}

3、扫描包中的信息,获取banner内容

private Banner getBanner(Environment environment) {
		Banners banners = new Banners();
		//获取图形类banner的信息
		banners.addIfNotNull(getImageBanner(environment));
		//获取文本类banner的信息
		banners.addIfNotNull(getTextBanner(environment));
		if (banners.hasAtLeastOneBanner()) {
			return banners;
		}
		if (this.fallbackBanner != null) {
			return this.fallbackBanner;
		}
		//若不存在,则会返回默认的
		return DEFAULT_BANNER;
	}

就以文本类的来举例

private Banner getTextBanner(Environment environment) {
		String location = environment.getProperty(BANNER_LOCATION_PROPERTY, DEFAULT_BANNER_LOCATION);
		Resource resource = this.resourceLoader.getResource(location);
		try {
			if (resource.exists() && !resource.getURL().toExternalForm().contains("liquibase-core")) {
				return new ResourceBanner(resource);
			}
		}
		catch (IOException ex) {
			// Ignore
		}
		return null;
	}

由该类可以发现,会依次进行扫描,若在配置文件中配置了spring.banner.location的信息,则会返回banner.txt配置的路径
反之,就会返回DEFAULT_BANNER_LOCATION,然后通过资源加载器来获取该类资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值