玩转 SpringBoot 2.x 之自定义 Banner 日志输出原理篇

1 查看 SpringBoot 官方文档

https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-banner

通过阅读springboot的文档发现一个有意思的东西 自定义 Banner ,具体内容如下:

 根据上述内容了解到 SpringBoot 不仅可以通过文本,还可以通过图片来自定义 Banner 。本着打破沙锅问到底的精神,继续查看官网文档。

通过下图信息可以知道 SpringBoot 提供了一个 Banner 的接口,来控制是否使用Banner 和通过什么方式进行Banner的打印。

2 阅读 SpringBoot  处理 Banner 的源码

SpringBoot 定义了一个接口 Banner 来指定打印的方式和是否启用 Banner ,首先看看 Banner 接口的实现类有哪些。

点击 ResourceBanner 看看如何实现 Banner 的打印 

通过上面的代码我们可以清晰知道 他是将获取resource的输入流然后打印, 那我们就在看看 这个resource是在什么时候给他的

 

关于文本Banner SpringBoot  优先看配置文件有没有配置 spirng.banner.location,如果有就走配置文件的内容,如果没有就走resource目录下 banner.txt文件的内容。 

 

关于图片Banner SpringBoot 优先看配置文件有没有配置 spirng.banner.image.location 如果有就走配置文件的内容,如果没有就走resource目录下  banner.gif 或 banner.jpg 或 banner.png 图片的内容。

 

SpringBoot 启动获取 Banner逻辑: SpringBoot 在启动的时候会先显示ImageBanner, 然后就是 TextBanner  如果都没有就显示默认的Banner。

 

 看到这里是不是有点恍然大明白的赶脚。

3 自定义 Banner 实战

3.1 自定义文本Banner

原理看明白啦 ,接下来上代码了。首先我们通过最简单的方式在resource目录下创建一个banner.txt 

我们可以通过http://www.network-science.de/ascii (文字转文本)https://www.fontke.com/tool/image2ascii/(图片转文本)来定义我们想要的文本内容。

banner.txt 内容如下

.........................................................................................................................................................................
............................,]]/@@@@@@@O.................................................................................................................................
...................,]O@@@@@@@@@@@@@@@@@@\................................................................................................................................
...............,/@@@@@@@@@@@@@@@@@@@@@@@@@@\`............................................................................................................................
............./@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`..........................................................................................................................
...........,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...........                _             _                 _  ...........................................................
..........=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`......... ___ _ __  _ __(_)_ __   __ _| |__   ___   ___ | |_ ..........................................................
.........=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`......../ __| '_ \| '__| | '_ \ / _` | '_ \ / _ \ / _ \| __|..........................................................
.........@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O........\__ \ |_) | |  | | | | | (_| | |_) | (_) | (_) | |_ ..........................................................
........,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@........|___/ .__/|_|  |_|_| |_|\__, |_.__/ \___/ \___/ \__|..........................................................
........=@@@@@@@@@`,[@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^.......    |_|                 |___/                       ..........................................................
........=@@@@@@@@^        .,[[O@@@@@@@@@@@@@@@@@@@@^....... ____    ___   ____   ____  _____ _     _____    _    ____  _____ ............................................
.........@@@@@@@^/@\]                [@@@@,\@@@@@@@........|___ \  / _ \ | ___| |  _ \| ____| |   | ____|  / \  / ___|| ____|............................................
........./@@@@@@[[[[@@@]           /@@O[[[[\ O@@@@^........  __) || | | ||___ \ | |_) |  _| | |   |  _|   / _ \ \___ \|  _|  ............................................
.......=@`@@@@^    ,`   ,`       ,`    .]    =@@@/\\....... / __/ | |_| | ___) ||  _ <| |___| |___| |___ / ___ \ ___) | |___ ............................................
.......@^ =@@^    =@@\                =@@\.  =@@/  @^......|_____(_)___(_)____(_)_| \_\_____|_____|_____/_/   \_\____/|_____|............................................
.......@^  .,@.   =@@@                =@@@.  @^   .@`....................................................................................................................
.......,@`   =@                             =/   ,@^.......     _                       _                       _                             ........................... 
.........,@@@@@\                           =@@@@@[......... ___| |__  _   _  ___   __ _(_) __ _ _ __  _ __ ___ (_)_ __   __ _ _   _ _   _  ___........................... 
...............\^                         =@...............|_  / '_ \| | | |/ _ \ / _` | |/ _` | '_ \| '_ ` _ \| | '_ \ / _` | | | | | | |/ _ \..........................
................@^   .@@/[@[[\/[\@[\O@   ,@`............... / /| | | | |_| | (_) | (_| | | (_| | | | | | | | | | | | | | (_| | |_| | |_| |  __/..........................
.................\\.   \@/ \,`=`^ \@/   /@`................/___|_| |_|\__,_|\___/ \__, |_|\__,_|_| |_|_| |_| |_|_|_| |_|\__, |\__, |\__,_|\___|..........................
...................\@\`   ,[[OO[[`  .]@/`..................                          |_|                                |___/ |___/            ..........................
.....................,/@@\`     ,]@@O....................................................................................................................................
.................../@@@@\ .[[[[[. ,@@@@@`.................. _  _ _    _ ____   __                   ____  _ ____   __                       .............................
.................,@@@@@^\@\    ./@@`@@@@@\.................| |(_) | _/ |___ \ / /___      ___   _  / __ \/ |___ \ / /_   ___ ___  _ __ ___  .............................
................/@@@@@@   \@@@@@/`  @@@@@@\................| || | |/ / | __) | '_ \ \ /\ / / | | |/ / _` | | __) | '_ \ / __/ _ \| '_ ` _ \ .............................
...............=@@@@@@^             =@@@@@@^...............| || |   <| |/ __/| (_) \ V  V /| |_| | | (_| | |/ __/| (_) | (_| (_) | | | | | |.............................
................O@@@@@`=@@@` , ,@@@^=@@@@@@`...............|_|/ |_|\_\_|_____|\___/ \_/\_/  \__, |\ \__,_|_|_____|\___(_)___\___/|_| |_| |_|.............................                                  
...............=@   @@       =      ,@/[..@`............... |__/                            |___/  \____/                                   .............................

将该文件放入到resource目录下然后启动spirngboot项目

 

3.1 自定图片Banner 

我们将一个图片的名称改改为 banner.jpg 图片内容如下:

启动springboot项目 日志内容如下:

 

3.3 通过配置文件定义文本Banner 和图片Banner 

由于我们的图片有点大所以将图片宽和高改成了10px 所以显示的有点小。yml配置文件内容如下

我们也可以通过配置文件来自定我们具体要显示的图片和文本的地址来进行显示,项目启动后显示的就是我们配置的文本和图片了。 我们可以可以定义一个gif的图片 启动的时候效果更炫偶。

 4 demo 工具以及版本说明

开发工具:Spring Tool Suite (STS)

JDK版本:1.8.0_144

springboot版本:2.0.5.RELEASE

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您想要将Spring Boot的启动横幅(Banner)修改为自定义注解方式时,可以按照以下步骤进行实现: 1. 创建一个注解类,用于标记需要修改横幅的类或方法。例如,创建一个名为`CustomBanner`的注解类: ```java import java.lang.annotation.*; @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface CustomBanner { } ``` 2. 创建一个Banner自定义处理类,用于根据注解来修改横幅。例如,创建一个名为`CustomBannerHandler`的类: ```java import org.springframework.boot.Banner; import org.springframework.boot.ResourceBanner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; public class CustomBannerHandler { public static void handleCustomBanner(Class<?> primarySource, String... args) { SpringApplication application = new SpringApplicationBuilder(primarySource) .banner(getCustomBanner()) .build(args); ConfigurableApplicationContext context = application.run(args); ApplicationContext applicationContext = context.getApplicationContext(); // 扫描自定义注解,并进行相应的操作 String[] beanNames = applicationContext.getBeanNamesForAnnotation(CustomBanner.class); for (String beanName : beanNames) { Object bean = applicationContext.getBean(beanName); // 在这里可以对标记了CustomBanner注解的类或方法进行相应的操作 // 例如,可以打印一些额外的信息或者执行一些初始化操作 System.out.println("CustomBanner: " + bean.getClass().getName()); } } private static Banner getCustomBanner() { // 这里可以根据需要指定自定义的横幅文件,例如使用文本文件作为横幅 return new ResourceBanner(CustomBannerHandler.class.getResource("/custom-banner.txt")); } public static void main(String[] args) { handleCustomBanner(SpringBootApplication.class, args); } } ``` 3. 创建一个自定义的横幅文件,例如将其命名为`custom-banner.txt`,并将其放置在项目的`resources`目录下。您可以在该文件中编写您想要显示的自定义横幅内容。 4. 在需要修改横幅的类或方法上添加`CustomBanner`注解。例如: ```java @SpringBootApplication @CustomBanner public class MyApplication { public static void main(String[] args) { CustomBannerHandler.handleCustomBanner(MyApplication.class, args); } } ``` 这样,当您运行`MyApplication`类时,将会使用自定义横幅文件中定义的内容作为启动横幅,并且标记了`CustomBanner`注解的类或方法也会被识别出来进行相应的操作。 请注意,以上代码仅为示例,您可以根据实际需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值