SpringBoot详解Banner的使用

 更新时间:2022年07月15日 09:39:52   作者:lhf2112  
这篇文章主要介绍了超个性修改SpringBoot项目的启动banner的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Banner的设置方式有以下几种

1、默认:SpringBoot + 版本号;

2、添加自定义资源文件:banner.txt;

3、添加自定义资源文件:banner.jpg/png/gif;

4、SpringApplication的setBanner方法,自定义资源;

下面我们进入源码,SpringBoot如何实现banner的加载:

进入SpringApplication的run方法,可以看到如下的一行内容:

Banner printedBanner = printBanner(environment);

这个就是获取banner的入口,我们来跟进下这个方法:

	private Banner printBanner(ConfigurableEnvironment environment) {
		if (this.bannerMode == Banner.Mode.OFF) {
			return null;
		}
		ResourceLoader resourceLoader = (this.resourceLoader != null) ? this.resourceLoader
				: new DefaultResourceLoader(getClassLoader());
		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);
	

代码首先检验是否关闭了banner(可以通过spring.main.banner-mode=off来配置),Banner.Mode的取值方式有三种,包括OFF、CONSOLE(控制台,默认)以及LOG(日志)。如果是关闭状态,那么直接返回空。

接下来程序会根据模式是CONSOLE或是LOG来分别进行处理。处理过程比较相似,我们先看LOG方式打印的方法:

	Banner print(Environment environment, Class<?> sourceClass, Log logger) {
		Banner banner = getBanner(environment);
		try {
			logger.info(createStringFromBanner(banner, environment, sourceClass));
		}
		catch (UnsupportedEncodingException ex) {
			logger.warn("Failed to create String for banner", ex);
		}
		return new PrintedBanner(banner, sourceClass);
	}

我们重点先关注getBanner方法:

	private Banner getBanner(Environment environment) {
		Banners banners = new Banners();
		banners.addIfNotNull(getImageBanner(environment));
		banners.addIfNotNull(getTextBanner(environment));
		if (banners.hasAtLeastOneBanner()) {
			return banners;
		}
		if (this.fallbackBanner != null) {
			return this.fallbackBanner;
		}
		return DEFAULT_BANNER;
	}

getBanner方法首先会尝试通过getImageBanner加载图片的banner,从配置文件的"spring.banner.image.location"配置项来拼接后缀gif、jpg、png,读取相应的文件,返回一个ImageBanner对象,添加到banners;

如果没有图片的banner,则会通过getTextBanner方法获取txt,从配置文件的"spring.banner.location"获取配置项,默认为banner.txt,读取文件,返回ResourceBanner对象,添加到banners;

这时如果banners还是空的,说明没有ImageBanner和ResourceBanner被配置,但是有手动设置的fallbackBanner,那么就会返回它,fallbackBanner就是通过setBanner方法加入的banner。否则就返回不含有自定义信息的,系统默认banner。

LOG方式下,会调用logger来进行info级别的日志输出。

而CONSOLE方式的情况下,方法如下:

	Banner print(Environment environment, Class<?> sourceClass, PrintStream out) {
		Banner banner = getBanner(environment);
		banner.printBanner(environment, sourceClass, out);
		return new PrintedBanner(banner, sourceClass);
	}

这里的getBanner方法和LOG方式是一样的,在这就不再赘述了。与LOG方式不同的是,这种方式是通过System.out标准输出流,将banner打印到控制台上。

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

相关文章

  • 带你入门Java的泛型

    带你入门Java的泛型

    这篇文章主要给大家介绍了关于Java中泛型使用的简单方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • IDEA项目如何取消git版本管控并添加svn版本控制

    IDEA项目如何取消git版本管控并添加svn版本控制

    在公司内部服务器环境下,将代码仓库从Gitee的Git迁移到SVN可以避免外部版本控制的风险,迁移过程中,先删除项目的.git文件夹,再通过Eclipse的设置界面删除原Git配置并添加SVN配置,之后,将项目提交到SVN仓库,确保使用ignore列表过滤不必要的文件
    2024-10-10
  • MybatisPlus保存、读取MySQL中的json字段失败问题及解决

    MybatisPlus保存、读取MySQL中的json字段失败问题及解决

    这篇文章主要介绍了MybatisPlus保存、读取MySQL中的json字段失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • idea项目中target文件提示拒绝访问的解决

    idea项目中target文件提示拒绝访问的解决

    这篇文章主要介绍了idea项目中target文件提示拒绝访问的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • spring boot自定义配置源操作步骤

    spring boot自定义配置源操作步骤

    这篇文章主要介绍了spring boot自定义配置源操作步骤,需要的朋友可以参考下
    2017-10-10
  • SpringBoot时间格式化的方法小结

    SpringBoot时间格式化的方法小结

    SpringBoot中的时间格式化通常指的是将Java中的日期时间类型转换为指定格式的字符串,或者将字符串类型的时间解析为Java中的日期时间类型,本文小编将给大家详细总结了SpringBoot时间格式化的方法,刚兴趣的小伙伴跟着小编一起来看看吧
    2023-10-10
  • Java 关键字 速查表介绍

    Java 关键字 速查表介绍

    下面小编就为大家带来一篇Java 关键字 速查表介绍。小编觉得听不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Spring AOP实现复杂的日志记录操作(自定义注解)

    Spring AOP实现复杂的日志记录操作(自定义注解)

    Spring AOP实现复杂的日志记录操作(自定义注解),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • MyBatis-Plus多表联合查询并且分页(3表联合)

    MyBatis-Plus多表联合查询并且分页(3表联合)

    这篇文章主要介绍了MyBatis-Plus多表联合查询并且分页(3表联合),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • hibernate-validator改进校验框架validator v0.4使用

    hibernate-validator改进校验框架validator v0.4使用

    这篇文章主要为大家介绍了改进 hibernate-validator,新一代校验框架 validator 使用介绍 v0.4,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-03-03

最新评论