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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot自定义banner及验证过程

    一 什么是banner 我们在启动项目的时候控制台会打印出spring的图案就是banner. 二自定义banner 1创建一个springboot项目. 2在resource目录下创建一个名为banner.txt的文件. 3往banner.txt中写入我们的图案. 4引入web启动依赖. <dependencies> <!-- web启动器--> <dependency> <groupId>org.springframework.boot</grou

  • SpringBoot个性化启动Banner设置方法解析

    1.添加Banner.txt文件 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: tianheng Sprin

  • SpringBoot之自定义Banner详解

    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(Stri

  • Springboot居然可以设置动态的Banner(推荐)

    先给小火伴们留个悬念 嘿嘿 文末有神秘代码~ (大家可以猜猜用来干嘛滴先!) 嘿嘿 不知道过年这两天大家过得怎样呀~ 比如 春晚抢到了多少红包呀?

  • 详解SpringBoot基础之banner玩法解析

    SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner.看似简单的banner,我们能够对它做些什么呢?本篇文章就带大家深入了解一下banner的使用(版本:SpringBoot2.1.4). 制作自己的banner 第一步:在src/main/resources下面创建banner.txt. 第二步:访问网站 http://patorjk.com/software/taag,在网站"Type Something "处输入想要制作的单词(比如

  • 教你怎么用Springboot自定义Banner图案

    一.前言 我们在启动 Spring Boot 项目时,默认会在控制台打印 Spring logo 和版本等信息,如下: 这就是 Spring Boot 的 Banner 打印功能,其实我们可以自定义打印的 banner ,也可以禁用和启用打印 banner 功能.在真实项目中,我们一般不会去自定义 banner 图案,它其实就是项目启动时打印图案或者文字而已,没实际意义.推荐在自己个人项目玩玩这个彩蛋即可,顺便简单了解下它内部实现原理. 比如,自定义一个 banner 之后,项目启动控制台打印如

  • SpringBoot项目启动时增加自定义Banner的简单方法

    目录 前言 制作Banner 总结 前言 最近有小伙伴推荐给博客启动的时候加上自定义Banner,开始我还不太明白他说的是那部分,后面给我发了这样一个文件,陌溪瞬间就懂了 ////////////////////////////////////////////////////////////////////   //                          _ooOoo_                               //   //                    

  • 超个性修改SpringBoot项目的启动banner的方法

    如果我们使用过SpringBoot,那么就会对下面的图案不陌生.Springboot 启动的同时会打印下面的图案,并带有版本号. 查看SpringBoot官方文档可以找到关于 banner 的描述 The banner that is printed on start up can be changed by adding a banner.txt file to your classpath or by setting the spring.banner.location property t

  • SpringBoot之Banner的使用示例

    背景 初次运行SpringBoot的小伙伴想必对于SpringBoot打印的Banner很感兴趣 Spring Boot在启动项目时,控制台会打印一个Spring的logo.如果不做任何配置 该信息来源于SpringBootBanner类的静态常量BANNER,该属性是一个字符串数组,不指定任何banner属性时,控制台默认输出该数组数据.我们可以通过Spring Boot提供的强大配置功能来改变banner的输出. 通常长成这样 一个Spring扑面而来~ 那么我们能否定制自己的启动页呢? 源

  • SpringBoot详解Banner的使用

    Banner的设置方式有以下几种 1.默认:SpringBoot + 版本号: 2.添加自定义资源文件:banner.txt: 3.添加自定义资源文件:banner.jpg/png/gif: 4.SpringApplication的setBanner方法,自定义资源: 下面我们进入源码,SpringBoot如何实现banner的加载: 进入SpringApplication的run方法,可以看到如下的一行内容: Banner printedBanner = printBanner(environ

  • Springboot详解底层启动过程

    目录 SpringApplication构造分析 SpringApplication run分析 SpringApplication构造分析 1.记录 BeanDefinition 源 spring容器刚开始是空的,要去各个源找到beanDefinition,这些源可能是配置类,可能是xml文件.在构造方法里会获取一个主源,也就是引导类,根据引导类去获取beanDefinition. 2.推断应用类型 根据jar包去判断是什么引用类型 3.记录 ApplicationContext 初始化器 对

  • SpringBoot详解如何实现读写分离

    目录 前言 1.项目引入依赖 2.yml配置 3.启动 4.测试 5.中间所遇到的问题 前言 根据公司业务需求,项目需要读写分离,所以记录下读写分离的过程. 分为两个部分: 1.项目的读写分离. 2.mysql数据库的主从复制. 本篇使用的依赖包为sharding-jdbc-spring-boot-starter,也有考虑直接用dynamic-datasource-spring-boot-starter,但是需要在程序中显式的声明所指定的数据源,并且在从库>=2 的时候需要自己写算法进行读库的选

  • springboot详解实现车险理赔信息管理系统代码

    目录 一,项目简介 二,环境介绍 三,系统展示 四,核心代码展示 五,项目总结 一,项目简介 客户的主要功能:个人资料管理,购买的保险信息管理,理赔的申请 事故调查员功能:个人资料管理,事故调查管理,现场勘察管理 管理员功能:个人资料管理,用户管理,理赔审请审核,赔偿金发放管理 二,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 开发技术:后台springboot+sp

  • SpringBoot详解如果通过@Value注解给静态变量注入值

    目录 前序 方案一 方案二 方案三 使用场景 总结 最近做项目的时候,给static变量赋值, 使用 @value注解 ,结果 获取一直为null , 1.spring不允许/不支持把值注入到静态变量中 2.Spring的@Value依赖注入是依赖set方法 3.set方法是普通的对象方法 4.static变量是类的属性,static没有set方法 前序 SpringBoot中使用@Value()只能给普通变量注入值,不能直接给静态变量赋值 例如,application-dev.properti

  • Springboot详解RocketMQ实现广播消息流程

    RocketMQ消息模式主要有两种:广播模式.集群模式(负载均衡模式) 广播模式是每个消费者,都会消费消息: 负载均衡模式是每一个消费只会被某一个消费者消费一次: 我们业务上一般用的是负载均衡模式,当然一些特殊场景需要用到广播模式,比如发送一个信息到邮箱,手机,站内提示: 我们可以通过@RocketMQMessageListener的messageModel属性值来设置,MessageModel.BROADCASTING是广播模式,MessageModel.CLUSTERING是默认集群负载均衡

  • Springboot详解RocketMQ实现消息发送与接收流程

    springboot+rockermq 实现简单的消息发送与接收 普通消息的发送方式有3种:单向发送.同步发送和异步发送. 下面来介绍下 springboot+rockermq 整合实现 普通消息的发送与接收 创建Springboot项目,添加rockermq 依赖 <!--rocketMq依赖--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-

  • SpringBoot详解如何进行整合Druid数据源

    目录 1.自定义方式 1.添加依赖 2.编写配置 3.测试 2.starter方式(推荐) 1.添加依赖 2.编写配置 3.测试 Druid是数据库连接池,它能够提供强大的监控和扩展功能.官方文档 Spring Boot整合第三方技术的两种方式: 自定义 找starter场景 1.自定义方式 使用自定义方式整合Druid 1.添加依赖 在pom.xml添加相关依赖 <!--数据库相关--> <dependency> <groupId>org.springframewor

  • Springboot详解如何整合使用Thymeleaf

    目录 引入Thymeleaf 取值 有无转义 循环 模板引擎的作用就是我们来写一个页面模板,比如有些值呢,是动态的,我们写一些表达式.而这些值,从哪来呢,就是我们在后台封装一些数据.然后把这个模板和这个数据交给我们模板引擎,模板引擎按照我们这个数据帮你把这表达式解析.填充到我们指定的位置,然后把这个数据最终生成一个我们想要的内容给我们写出去,这就是我们这个模板引擎 如果我们没有模板引擎的话,在页面中会提示500 引入Thymeleaf 在项目中加入依赖 <!--thymeleaf--> <

  • SpringBoot详解整合MyBatis过程中可能遇到的问题

    尽量不要用 jUnit 提供的单元测试 提一个要求尽量使用SpringBoot 提供的测试类进行测试,能够自动扫描组件以及使用容器中的bean对象 还有如果有组件 中存在注入对象的话,那么必须在SpringBoot容器中取出 这个组件,进而使用注入的对象的功能!!! 今天有个错误,花了很长时间来解决,最后发现是一个很低级很基础的错误! 这是mapper接口,使用@mapper 相当于将接口的代理对象注册进入bean中,但是上下文中找不到(其实是正常) 因为 @Mapper 这个注解是 Mybat

随机推荐