←←←←←←←←←←←← 快!点关注spring
SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是咱们要讲的banner。看似简单的banner,咱们可以对它作些什么呢?本篇文章就带你们深刻了解一下banner的使用(版本:SpringBoot2.1.4)。sql
第一步:在src/main/resources下面建立banner.txt。数组
第二步:访问网站http://patorjk.com/software/taag,在网站“Type Something ”处输入想要制做的单词(好比:Hello World),会生成对应的字符。也能够经过其余参数来调整字符的样式。springboot
复制生成的字符,粘贴到banner.txt,再次启动程序即可以打印出指定的banner了。架构
我的比较喜欢的banner是以下图形:并发
${AnsiColor.BRIGHT_YELLOW} //////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // ////////////////////////////////////////////////////////////////////
在新版本的SpringBoot中,支持了gif、jpg和png的图片形式的banner打印。固然,并不会把图片直接打印在控制台,而是将其像素解析转换成assii编码以后打印。app
对于gif动图,会把动图的每一个图片都打印出来,若是动图比较大,打印时间较长。能够尝试一下,但建议不要使用gif。分布式
在banner.txt中,还能够进行一些设置,好比上图中的ide
在未指定banner.txt或banner图片时,默认图形存储在哪里了呢?下面咱们了解一下Banner接口。spring-boot
@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的参数设定能够经过两种形式,一种是代码的形式,一种是配置文件的形式。
使用代码的形式首先要将默认的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的打印。上面示例中已经有所展现。
分享免费学习资料
针对于还会准备免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
为何某些人会一直比你优秀,是由于他自己就很优秀还一直在持续努力变得更优秀,而你是否是还在知足于现状心里在窃喜!但愿读到这的您能点个小赞和关注下我,之后还会更新技术干货,谢谢您的支持!
资料领取方式:加入Java技术交流群963944895
,私信管理员便可免费领取