Spring Boot 2 (二):Spring Boot 2 动态 Banner

Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner。

一、配置依赖

使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发布的 2.0 RELEASE,现在网站https://start.spring.io/也将 Spring Boot 2.0 设置为默认版本。

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.0.0.RELEASE</version>
  5. </parent>

设置完毕后,dependencies中没有指明版本的依赖包,将自动使用2.0.0.RELEASE依赖的版本。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. </dependencies>

Spring Boot 2.0 刚刚发布,一些 Maven 仓库还没更新,如果导入项目后依赖包不能下载,可以手动添加 Spring Boot 官方 Maven 仓库。

  1. <repositories>
  2. <repository>
  3. <id>spring-milestones</id>
  4. <name>Spring Milestones</name>
  5. <url>https://repo.spring.io/libs-milestone</url>
  6. <snapshots>
  7. <enabled>false</enabled>
  8. </snapshots>
  9. </repository>
  10. </repositories>

注意:第一次使用 Spring Boot 2.0 ,完整依赖包需要下载半小时左右。

二、Spring Boot 更换 Banner

我们先来回顾一下在 Spring Boot 1.0 中如何更换启动 Banner,其实都很简单,只需要在src/main/resources路径下新建一个banner.txt文件,banner.txt中填写好需要打印的字符串内容即可。

一般情况下,我们会借助第三方工具帮忙转化内容,如网站http://www.network-science.de/ascii/将文字转化成字符串,网站:http://www.degraeve.com/img2txt.php可以将图片转化成字符串。

以Hello World为启动字符串来进行测试:

  1. .__ .__ .__ .__ .___
  2. | |__ ____ | | | | ____ __ _ _____________| | __| _/
  3. | | \_/ __ \| | | | / _ \ \ \/ \/ / _ \_ __ \ | / __ |
  4. | Y \ ___/| |_| |_( <_> ) \ ( <_> ) | \/ |__/ /_/ |
  5. |___| /\___ >____/____/\____/ \/\_/ \____/|__| |____/\____ |
  6. \/ \/ \/

在 Spring Boot 2.0 项目src/main/resources路径下新建一个banner.txt文件,粘贴上述字符串,启动 Spring Boot 项目观察启动日志,发现 Spring Boot 2.0 已经将默认的 Spring 字符串替换为 hello world。说明 Spring Boot 2.0 也支持1.0更换 Banner 的方法。

接下来在 Spring Boot 2.0 项目中测试打印动态 Banner ,使用的gif如下:

同样我们将 banner.gif 文件放到项目的src/main/resources路径下,启动项目进行测试,输出栏打印信息如下:

  1.  
  2. ..
  3. .::*
  4. ...
  5.  
  6. ..... ....
  7. ........ . ...
  8. ........ . ..
  9. ...... ....
  10. .... ...
  11. . .
  12.  
  13. ..**::**..
  14. .*::::::::::*.
  15. .*::::::::::::*.
  16. .*::::::::::::*.
  17. .*::::::::::::*.
  18. .*::::::::::*.
  19. ..**::***.
  20.  
  21. ..
  22. ..... ..
  23. ..... ...
  24. ...... ......
  25. . ... . .....
  26. . .... . .
  27.  
  28. ............................ .............
  29. .................. ......... ................ .
  30. ................... ... . ... ............
  31. ............. . ... ...............
  32. . ......... ...........
  33. .......... ....... ....
  34. ............ ........
  35. ........ ........
  36. .... . .........
  37. ........ ........
  38. ......... ..********.. ......*..
  39. ........ .**::::::::::::**. ........
  40. ........... .**::::::::::::::::**. .......
  41. ...... .*::::::::::::::::::::*. .......
  42. ... .. .*::::::::::::::::::::::*. .......
  43. ...... .::::::::::::::::::::::::. .......
  44. .......... .::::::::::::::::::::::::. ... ....
  45. ......... .*:::::::::::::::::::::::. ....
  46. ......... .*::::::::::::::::::::::*. ...
  47. ......... .*::::::::::::::::::::*. ....
  48. ........ .**::::::::::::::::**. .........
  49. ... .... .**::::::::::::**. .........
  50. . ........ .********.. .........
  51. ....... . ......*..
  52. ......... . .....
  53. ....... .........
  54. ........ . ............
  55. ............ .. ...........
  56. . ............. .........
  57. ................ .... ..........
  58. ............. .... . ......... . ..... .
  59. .... ...... ......... . .. .... .............. ....
  60. .. ............. ........... ..............
  61.  
  62. ::. .*:*
  63. :. *:* *. .*:*
  64. .:*. *: .*:*. :. .:
  65. :* : :. .::::* :
  66. : : * *****..... *.: :
  67. : : .:* .::::::::::**.. .. : *
  68. : *: .*:::::::::::::::*. * **
  69. o *** ...**::::::::::::::::::**. * :.:
  70. : .* : .....***::::::::::::::::::::::*. : : o
  71. :*. * ..*****:::::::::::::::::::::::::*. * : o
  72. : . .*::::::::::::::::::::::::::::::::*. :: *
  73. :* : *::::::::::::::::::::::::::::::::::* : o
  74. * o * .*::::::::::::::::::::::::::::::::::*. .:o :
  75. : : : .*::::::::::::::::::::::::::::::::::*. : . :
  76. : .. .*::::::::::::::::::::::::::::::::::*. * : *
  77. : : .*::::::::::::::::::::::::::::::::::* : *:
  78. . :* .*o:::::::::::::::::::::::::::::::*. . :
  79. : : * .*::::::::::::::::::::::::::::::*. * :*
  80. o * : .*::::::::::::::::::::::::::::*. : ** :
  81. :* * .*::::::::::::::::::::::::**. *.. *
  82. ** * ..*::::::::::::::::::::*.. :* *
  83. * o .. ..**::::::::::::**.. .:. : :
  84. : o.: ...******... *. : :.
  85. : ::o:. *: * *:
  86. :. : .*:*. :* .*::
  87. .:* .* *o: .:
  88. .:*. .*:
  89.  
  90. ...

通过上述输出我们发现 Spring Boot 在启动的时候,会将 gif 图片的每一个画面,按照顺序打印在日志中,所有的画面打印完毕后,才会启动 Spring Boot 项目。

如果目录src/main/resources下同时存在banner.txtbanner.gif,项目会先将banner.gif每一个画面打印完毕之后,再打印banner.txt中的内容。

项目的启动 Banner 有什么用呢,在一些大的组织或者公司中,可以利用这个特性定制自己专属的启动画面,增加团队对品牌的认同感。

Spring Boot 2 (二):Spring Boot 2 动态 Banner的更多相关文章

  1. Spring Boot系列二 Spring @Async异步线程池用法总结

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

  2. <Spring Data JPA>二 Spring Data Jpa

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  3. Spring boot 入门二:Spring Boot配置文件详解

    一.自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/resources目录下创建一个application.properties.同时也支持ym ...

  4. spring boot 学习(二)spring boot 框架整合 thymeleaf

    spring boot 框架整合 thymeleaf spring boot 的官方文档中建议开发者使用模板引擎,避免使用 JSP.因为若一定要使用 JSP 将无法使用. 注意:本文主要参考学习了大神 ...

  5. Spring Boot系列(二) Spring Boot 之 REST

    Rest (Representational Stat Transer) 是一种软件架构风格. 基础理论 架构特性 性能 可伸缩 简化的统一接口 按需修改 组件通信透明 可移植 可靠性 架构约束 C/ ...

  6. Spring学习(二)—— java的动态代理机制

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  7. Spring学习(十二)-----Spring @PostConstruct和@PreDestroy实例

    实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...

  8. Spring学习(十二)-----Spring Bean init-method 和 destroy-method实例

    实现 初始化方法和销毁方法3种方式: 实现标识接口 InitializingBean,DisposableBean(不推荐使用,耦合性太高) 设置bean属性 Init-method destroy- ...

  9. spring学习笔记二:spring使用构造方法注入(set方式注入)

    项目目录树: 1.spring的依赖包配置 * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/log4j/log4j-1.2.14.jar * SPRIN ...

随机推荐

  1. 关于RTSP-Over-HTTP

    --------------------更新2018.07.10------------------- myRtspClient-1.3.0开始支持RTSP-Over-HTTP ----------- ...

  2. Android提权漏洞CVE-2014-7920、CVE-2014-7921

  3. shell编程:if语句

    条件判断式的两边的空格不能生

  4. gitlab8.2->8.16->8.17->9.0升级

    注:不要跨过8.16升级至8.17,这样做升级过程会报错 ###################################8.2升级至8.16########################## ...

  5. 关于Sublime Text3的emmet插件和tab快捷键冲突问题

    当使用Sublime text3时会遇到快捷键冲突的问题,其中就有安装Emmet之后,tab无法缩进了, 网上有些说看看Browse Packages目录下是否有PyV8插件安装,该插件一般情况下随E ...

  6. ES6class

    类的方法都定义在prototype对象上面,所以类的新方法可以添加在prototype对象上面.Object.assign方法可以很方便地一次向类添加多个方法. 类的内部所有定义的方法,都是不可枚举的 ...

  7. python中使用rabbitmq消息中间件

    上周一直在研究zeromq,并且也实现了了zeromq在python和ruby之间的通信,但是如果是一个大型的企业级应用,对消息中间件的要求比较高,比如消息的持久化机制以及系统崩溃恢复等等需求,这个时 ...

  8. JavaScript 函数声明与函数表达式的区别 函数声明提升(function declaration hoisting)

    解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问).至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真的被 ...

  9. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  10. jsp无法访问

    一直无法访问jsp: 由于Spring boot使用的内嵌的tomcat,而内嵌的tamcat是不支持jsp页面的,所有需要导入额外的包才能解决. <!-- 解决jsp无法访问 --> & ...