

SpringBoot基础之banner玩法解析
source link: http://www.choupangxia.com/topic/detail/137?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner。看似简单的banner,我们能够对它做些什么呢?本篇文章就带大家深入了解一下banner的使用(版本:SpringBoot2.1.4)。
制作自己的banner
第一步:在src/main/resources下面创建banner.txt。
第二步:访问网站 http://patorjk.com/software/taag,在网站“Type Something ”处输入想要制作的单词(比如:Hello World),会生成对应的字符。也可以通过其他参数来调整字符的样式。
复制生成的字符,粘贴到banner.txt,再次启动程序便可以打印出指定的banner了。
个人比较喜欢的banner是如下图形:
${AnsiColor.BRIGHT_YELLOW} //////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // ////////////////////////////////////////////////////////////////////
在新版本的SpringBoot中,支持了gif、jpg和png的图片形式的banner打印。当然,并不会把图片直接打印在控制台,而是将其像素解析转换成assii编码之后打印。
对于gif动图,会把动图的每个图片都打印出来,如果动图比较大,打印时间较长。可以尝试一下,但建议不要使用gif。
在banner.txt中,还可以进行一些设置,比如上图中的${AnsiColor.BRIGHT_YELLOW}。
- AnsiColor.BRIGHT_RED:设置控制台中输出内容的颜色
- application.version:用来获取MANIFEST.MF文件中的版本号
- application.formatted-version:格式化后的application.version版本信息
- spring-boot.version:Spring Boot的版本号
- spring-boot.formatted-version:格式化后的spring-boot.version版本信息
Banner接口
在未指定banner.txt或banner图片时,默认图形存储在哪里了呢?下面我们了解一下Banner接口。
@FunctionalInterface public interface Banner { // 打印banner void printBanner(Environment environment, Class<?> sourceClass, PrintStream out); enum Mode { // 关闭 OFF, // 控制台 CONSOLE, // 日志文件 LOG } }
在banner接口中提供了打印banner的方法和一个枚举类。枚举类有三个值:OFF、CONSOLE、LOG,用来控制banner的打印,分别对应:关闭打印、控制台打印和日志打印。
banner接口的实现主要有ResourceBanner、ImageBanner、SpringBootBanner和其他内部类的实现。其中上面看到的图形的打印就来自于SpringBootBanner。看一下源代码:
class SpringBootBanner implements Banner { private static final String[] BANNER = { "", " . ____ _ __ _ _", " /\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\", "( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\", " \\\\/ ___)| |_)| | | | | || (_| | ) ) ) )", " ' |____| .__|_| |_|_| |_\\__, | / / / /", " =========|_|==============|___/=/_/_/_/" }; private static final String SPRING_BOOT = " :: Spring Boot :: "; private static final int STRAP_LINE_SIZE = 42; @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream printStream) { for (String line : BANNER) { printStream.println(line); } String version = SpringBootVersion.getVersion(); version = (version != null) ? " (v" + version + ")" : ""; StringBuilder padding = new StringBuilder(); while (padding.length() < STRAP_LINE_SIZE - (version.length() + SPRING_BOOT.length())) { padding.append(" "); } printStream.println(AnsiOutput.toString(AnsiColor.GREEN, SPRING_BOOT, AnsiColor.DEFAULT, padding.toString(), AnsiStyle.FAINT, version)); printStream.println(); } }
在printBanner的方法实现中,首先打印了默认的Banner字符串数组,然后将SPRING_BOOT和版本信息进行拼接打印。
Banner的参数设置
banner的参数设定可以通过两种形式,一种是代码的形式,一种是配置文件的形式。
使用代码的形式首先要将默认的main方法进行改造,手动创建SpringApplication对象,然后设置相应的参数。示例代码:
public static void main(String[] args) { SpringApplication app = new SpringApplication(SpringbootBannerApplication.class); app.setBannerMode(Banner.Mode.CONSOLE); Banner banner = new ImageBanner(new ClassPathResource("banner1.png")); app.setBanner(banner); app.run(args); }
通过配置文件设置就比较简单,直接在application.properties中进行配置,springboot已经帮我们预制好了相应的参数。
spring.banner.location=classpath:banner1.png spring.banner.image.margin=2 spring.banner.image.height=76 spring.banner.charset=UTF-8 spring.banner.image.invert=false spring.banner.image.location=banner1.png spring.main.banner-mode=console spring.main.show-banner=true
其中spring.main.show-banner来控制是否打印banner,在新版本中不建议使用,可以使用spring.main.banner-mode代替,将其值设置为OFF即可关闭banner的打印。
引入文本banner通过spring.banner.location来指定,引入图片相关的banner需要通过spring.banner.image.location来指定路径,否则会出现乱码情况。
如果不想显示banner,可以在代码中通过setBannerMode(Banner.Mode.OFF)方法或通过参数配置spring.main.banner-mode=off来关闭banner的打印。上面示例中已经有所展示。
关注微信公众:程序新视界,回复“spring配置”即可获得本篇内容PDF版本,更多免费资料,期待你的到来。
Recommend
-
123
简介在天猫消费升级、品质升级的大背景下,一个交互体验优秀的APP变得尤为重要。而首页的首焦Banner更应该精雕细琢,因此我们挖掘了体验上的小创新,希望能给用户眼前一亮的体验小惊喜。我们实现了多层基于不同位移系数,接收重力感应及手势滑动的banner,从而达到...
-
55
使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号。查看官方文档可以找到关于 banner...
-
20
-
35
这个内容有点儿水了。但是将springboot启动时的banner修改一下是个蛮好玩的事情。比如,不知道什么时候,我们组的springboot应用的banner就被改成了这个样子: ///////////////////////////////////////////////////////////////...
-
10
在流量红利逐渐消失的互联网下半场,短视频所带来的全新流量成为了各行各业角逐、深耕的新战场,彷佛一切皆可短视频。而如何运营短视频,获取流量以及带货变现也成为了运营者最为关注的重点话题。 ...
-
6
这个小功能据说是Springboot2.x的小彩蛋,出来很久很久了。之前知道没试过,这次试了一下,还可以,挺好玩的。最近因为开始重新看Springboot,看到了这个部分,于是整理到了文章中。烂大街的东西,拿来丢人显眼了。什么是banner?就是这个默认...
-
2
平台玩法深度解析 抖音最新政策、热点新玩法、爆款方法论 |微播易 作者:
-
2
元宇宙+DeFi 项目 GIBXSwap 的 ILO 玩法解析加密市场在经历了多次热潮后,生态和用户对于新兴项目又有了更高的要求,主要集中于安全、效率、流动性、去中心化等。尽管在 2020 年期间迅速冲击人们视线的 DeFi、波卡、NFT、ETH2.0、存储等项目或模...
-
8
万字深度解析:游戏规则、机制与玩法的关系和底层发展逻辑
-
7
SpringBoot + 自定义注解 + AOP 高级玩法打造通用开关 最近在工作中迁移代码的时候发现了以前自己写的一个通用开...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK