在这一页,我们将提供spring boot
自定义横幅(banner
)的例子。
在应用程序启动时,spring boot
会打印一个默认的标语。
我们可以使用类路径中的banner.txt
文件改变默认横幅。
我们也可以使用spring boot
Banner
接口以编程方式改变默认横幅。
如果我们想显示图片作为横幅,那么把图片文件放在类路径中,命名为banner.jpg
、banner.gif
或banner.png
。
横幅文本文件和横幅图像文件也可以分别使用banner.location
和banner.image.location
在应用程序属性文件中进行配置。
Spring boot
提供了banner
变量来打印banner
的其他信息。
如果需要,我们可以完全禁用banner
。
我们可以使用自定义的横幅,如下所示。
Text Banner: 对于文本横幅,只需创建一个名为banner.txt
的文件,并将其保存在src/main/resources
位置。
Image Banner: 对于图片横幅,只需创建一个名为banner.gif
的文件,并将其放在src\main\resources
的位置。也可以使用其他文件扩展名,如jpg
、png
。控制台应该支持显示图片。
在application.properties
中,我们可以配置以下与横幅有关的属性。
banner.charset: 它配置了横幅编码。默认是UTF-8
。
banner.location: 它是banner
文件的位置。默认是classpath:banner.txt
。
banner.image.location: 它配置了横幅图像文件的位置。默认是classpath:banner.gif
。文件也可以是jpg
、png
。
banner.image.width: 它配置了横幅图像的宽度,单位是char
。默认为76
。
banner.image.height: 它配置了横幅图像的高度,以char
为单位。默认是基于图像的高度。
banner.image.margin: 它是左边的图像边距,单位是char
。默认为2。
banner.image.invert: 它配置了深色终端主题的图像是否应该被倒置。默认为false
。
现在在这个页面上,我们将提供如何一步步使用自定义横幅的例子。
查找示例中使用的maven
文件。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.concretepagegroupId>
<artifactId>spring-demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>spring-demoname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.4.3.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
如果我们运行spring boot
应用程序,那么我们得到一个默认的横幅,如下所示。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.3.RELEASE)
2017-01-24 20:59:38.097 INFO 4420 --- [ restartedMain] com.concretepage.MyApplication : Starting MyApplication on Renu-PC with PID 4420 (F:\arvind\PROJECT\mars\spring-boot\spring-demo\target\classes started by Renu in F:\arvind\PROJECT\mars\spring-boot\spring-demo)
要创建自定义横幅,我们必须在spring boot
应用程序的类路径中使用一个名为banner.txt
的文件。我们应该注意文件名必须是banner.txt
。找到我们的演示项目结构。
在项目中,我们已经创建了banner.txt
文件,如下所示。
banner.txt
=========================
CONCRETEPAGE
=========================
找到主类来初始化SpringApplication
。
MyApplication.java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MyApplication.class);
application.run(args);
}
}
现在运行它,我们会看到默认的横幅不会被显示,而我们在banner.txt
中使用的文本横幅将被显示如下。
=========================
CONCRETEPAGE
=========================
2017-01-23 18:51:38.095 INFO 432 --- [ restartedMain] com.concretepage.MyApplication : Starting MyApplication on Renu-PC with PID 432 (F:\arvind\PROJECT\mars\spring-boot\spring-demo\target\classes started by Renu in F:\arvind\PROJECT\mars\spring-boot\spring-demo)
2017-01-23 18:51:38.101 INFO 432 --- [ restartedMain] com.concretepage.MyApplication : No active profile set, falling back to default profiles: default
横幅文件可以在应用程序属性文件中配置。
Spring boot
提供了banner.location
属性,用于配置banner
文件的位置。找到该属性文件。
application.properties
banner.location = banner/my-banner.txt
如果我们使用应用程序属性文件来配置横幅文件,那么文件名可以是任何自定义名称。在我的例子中,横幅文件的名字是my-banner.txt
,位于resources/banner
文件夹中。
如果我们在类路径中放置了banner.txt
文件,并在属性文件中配置了banner.location
,那么在这种情况下,banner
文件将从应用程序属性文件中获取,即由banner.location
配置。
默认的横幅字符集是UTF-8
,要改变字符集,请在应用程序属性文件中配置banner.charset
属性。
Spring boot
可以在启动时显示图片横幅。
为此,我们必须在类路径中放置一个文件,命名为banner.jpg
、banner.gif
或banner.png
。
图片会被转换成ASCII
码的形式。
如果我们想在属性文件中配置图片路径,那么spring boot
提供了banner.image.location
,配置方法如下。
application.properties
banner.image.location = banner/concretepage.jpg
如果我们同时配置文本和图像横幅,那么spring boot
将同时显示横幅,图像横幅将在文本横幅之上。
为了在启动时用banner
显示额外的信息,spring boot
提供了如下banner
变量。
${application.version} : 从MANIFEST.MF
文件中配置的Implementation-Version
属性中提取我们应用程序的版本号。
${application.formatted-version} : 选择我们在MANIFEST.MF
文件中配置的应用程序的版本号,该版本号将是(用括号包围并以v
为前缀)。
${application.title} : 从MANIFEST.MF
文件中配置的属性Implementation-Title
中挑选应用程序的标题。
${spring-boot.version} : 它显示我们正在使用的spring boot
版本,如1.4.3.RELEASE
。
${spring-boot.formatted-version} : 它显示的是我们正在使用的Spring Boot
版本的显示格式(用括号包围,前缀为v
),如例子(v1.4.3.RELEASE
)。
${AnsiColor.NAME} : 它用于制作彩色的横幅,其中NAME
是一个ANSI
转义代码。从链接中找到NAME
的值。
${AnsiBackground.NAME} : 它用于改变横幅的背景颜色,其中NAME
是一个ANSI
转义代码。从链接中找到NAME
的值。
${AnsiStyle.NAME} : 它用于改变横幅的风格,其中NAME
是一个ANSI
转义代码。从链接中找到NAME
的值。
我们需要在banner.txt
文件或应用程序属性文件中由banner.location
配置的banner
文件中配置上述属性。
现在我们将讨论一个例子,使用banner
变量找到我们的banner.txt
文件。
resources/banner.txt
=========================
CONCRETEPAGE
=========================
Application Version : ${application.version}
Application Formatted Version : ${application.formatted-version}
Application Title : ${application.title}
Spring Boot Version : ${spring-boot.version}
Spring Boot Formatted Version : ${spring-boot.formatted-version}
找到我们的例子中使用的MANIFEST.MF
文件。
resources/META-INF/MANIFEST.MF
Manifest-Version: 1.0
Implementation-Title: spring-demo
Implementation-Version: 0.0.1-SNAPSHOT
Implementation-Vendor-Id: com.concretepage
Build-Jdk: 1.8.0
Implementation-Vendor: Pivotal Software, Inc.
现在我们将测试我们的应用程序。
如果我们在IDE
中使用main
类运行应用程序,应用程序不会被完全部署,MANIFEST.MF
文件也不会被读取,所以banner
不会选择其值。
如果我们从命令提示符下使用mvn spring-boot:run
命令以分解形式运行应用程序,同样MANIFEST.MF
文件也不会被读取。
所以为了读取MANIFEST.MF
文件,我们需要创建JAR
。找到运行JAR
的步骤。
1. 使用命令提示符进入项目的根目录,运行以下命令。
mvn clean package
上述命令将创建一个可执行的JAR
文件,例如
spring-demo-0.0.1-SNAPSHOT.jar
2. 要运行JAR
文件,请使用以下命令。
java -jar target/spring-demo-0.0.1-SNAPSHOT.jar
现在我们将得到如下的输出。
我们将观察到,MANIFEST.MF
文件中的值被显示为横幅变量。
为了使横幅丰富多彩,spring boot
提供了AnsiColor.NAME
和AnsiBackground.NAME
,其中NAME
是一个ANSI
转义代码。
AnsiColor.NAME
可以从链接中找到,AnsiBackground.NAME
可以从链接中找到。现在让我们创建一个彩色的横幅。
找到banner.txt
。
banner.txt
${AnsiColor.BRIGHT_BLUE} ${AnsiBackground.BRIGHT_RED} HELLOW WORLD!
要以编程方式创建自定义横幅,我们需要遵循以下步骤。
1. Spring boot
提供了Banner
接口,使我们能够以编程方式改变banner
。我们将创建一个实现Banner
接口的类,并重写其方法printBanner()
来配置banner
。
MyBanner.java
package com.concretepage;
import java.io.PrintStream;
import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;
public class MyBanner implements Banner {
@Override
public void printBanner(Environment arg0, Class<?> arg1, PrintStream arg2) {
arg2.println("================================");
arg2.println("----------Hello World!----------");
arg2.println("================================");
}
}
2. 现在我们需要用SpringApplication
配置我们的banner
类。找到应用类。
MyApplication.java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MyApplication.class);
application.setBanner(new MyBanner());
application.run(args);
}
}
3. 只有当我们在类路径中没有使用banner.txt
文件,也没有在应用程序属性文件中配置banner.location
属性时,printBanner()
方法定义的横幅才会显示。找到应用程序的启动输出。
================================
----------Hello World!----------
================================
2017-01-24 22:53:21.386 INFO 5600 --- [ restartedMain] com.concretepage.MyApplication : Starting MyApplication on Renu-PC with PID 5600 (F:\arvind\PROJECT\mars\spring-boot\spring-demo\target\classes started by Renu in F:\arvind\PROJECT\mars\spring-boot\spring-demo)
要完全禁用横幅,我们可以使用应用程序的属性文件,也可以通过编程来实现。
1. 使用应用程序属性文件,我们需要配置spring.main.banner-mode
属性,值为off
,如下所示。
application.properties
spring.main.banner-mode = off
2. 要以编程方式禁用横幅,我们需要在main
方法中初始化SpringApplication
类时调用setBannerMode()
方法,并传递Banner.Mode.OFF
值,如下所示。
MyApplication.java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MyApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
如果我们想在控制台打印横幅,那么就使用Banner.Mode.CONSOLE
,如果我们想在日志上打印横幅,那么就使用Banner.Mode.LOG
和setBannerMode()
方法。
【1】Customizing the Banner
【2】Spring Boot Custom Banner Example
spring-boot-custom-banner-example.zip