springboot启动后,控制台会打印一个图案出来,这个图案就叫banner,如果不配置的话打印的是springboot默认的banner,像这个样子:
这个banner是可以通过多种方式自定义的,也可以设置显示模式关闭banner;
显示模式可以通过SpringApplication.setBannerMode()或者SpringApplicationBuilder.bannerMode()或者配置文件的spring.main.banner-mode设置;
显示模式:
默认读取classpath下的banner.txt文本,也可以通过配置文件配置;
例如在resources文件夹里添加一个banner.txt:
启动springboot后就会打印:
而不再是默认的sprinngboot的banner了;
几个可以的生成banner的网址:
默认读取classpath下的banner.gif或者banner.jpg或者banner.png图片,也可以通过配置文件配置;
例如resources文件夹下有个这样的banner.gif:(两帧的gif,一帧打印A一帧打印B)
启动会生成:(会将每一帧的图片按顺序全打印出来)
classpath下的banner.jpg图片:
生成:
classpath下的banner.png图片:
生成:
banner图片只会读取一个,如果多个classpath下有同名的图片,按照classpath顺序使用最先读取到的同名图片;
classapth下的不同格式图片读取优先级:banner.gif > banner.jpg > banner.bng;
可以通过实现Banner接口的printBanner()方法,使用SpringApplication.setBanner()方法或者SpringApplicationBuilder.banner()方法将该实现类设置为banner;
实现类MyBanner.java:(自定义banner类优先级比较低,去掉其他读取的banner再测试)
package testspringboot.test4banner;
import java.io.PrintStream;
import org.springframework.boot.Banner;
import org.springframework.boot.ansi.AnsiColor;
import org.springframework.core.env.Environment;
public class MyBanner implements Banner {
@Override
public void printBanner(Environment environment, Class> sourceClass, PrintStream out) {
String s = "HELLO WORLD\n"
+ "BANNER BANNER BANNER BANNER BANNER BANNER BANNER BANNER\n"
+ " BANNER BANNER BANNER BANNER BANNER BANNER BANNER BANNER\n"
+ " BANNER BANNER BANNER BANNER BANNER BANNER BANNER BANNER\n"
+ " BANNER BANNER BANNER BANNER BANNER BANNER BANNER BANNER\n"
+ "HELLO WORLD\n\n";
out.print(s);
}
}
启动类:
/**
* 2022年10月28日上午9:30:25
*/
package testspringboot.test4banner;
import org.springframework.boot.Banner.Mode;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.PropertySource;
/**
* @author XWF
*
*/
@SpringBootApplication
public class Test4Main {
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Test4Main.class);
app.setWebApplicationType(WebApplicationType.NONE); //关闭web服务
// app.setBannerMode(Mode.OFF); //关闭banner
app.setBanner(new MyBanner()); //自定义Banner类
app.run(args);
// SpringApplicationBuilder builder = new SpringApplicationBuilder(Test4Main.class);
// builder.web(WebApplicationType.NONE)
// .bannerMode(Mode.OFF)
// .banner(new MyBanner())
// .run(args);
}
}
执行结果:
properties或者yml里也可以对banner进行配置,相关配置如下:(似乎只能使用resources文件夹下的application.properties配置文件或者application.yml配置文件)
#设置显示banner模式,默认CONSOLE
#OFF:关闭打印banner
#CONSOLE:打印到System.out
#LOG:打印到log文件
spring.main.banner-mode=console
#设置banner的字符编码,默认utf-8
spring.banner.charset=utf-8
#设置banner文本资源的位置,默认classpath:banner.txt
#支持classpath*:、classpath:、file:、http://和https://
spring.banner.location=classpath:banner.txt
#设置ANSI颜色的位深度,默认4
#4:16色
#8:256色
spring.banner.image.bitdepth=4
#设置banner图像的高度(单位字符),默认图像高度
spring.banner.image.height=20
#设置banner图像的宽度,默认76
spring.banner.image.width=100
#是否为暗色系背景图片反转颜色,默认false
spring.banner.image.invert=false
#设置banner图片的位置,默认classpath:banner.gif(jpg和png也适用)
spring.banner.image.location=classpath:banner.jpg
#设置banner图片左边空白间隔,默认2
spring.banner.image.margin=10
#设置渲染图像时使用的像素模式
#TEXT:使用文本字符
#BLOCK:使用unicode块字符
spring.banner.image.pixelmode=TEXT
另外,banner.txt等的名称也可以改成别的,例如:banner.abc、xxx.a等等;
application.properties、application.yml配置文件的banner文本和图片 > classpath下的banner.txt/banner.gif/banner.jpg/banner.png > 自定义banner类 > springboot默认banner;
如果同时有banner文本和banner图片,两者都会打印,先打印图片再打印文本;
几个默认的可用参数:
也可以使用properties或者yml里自定义的配置参数,使用${}访问;
例如:
application.properties里设置:
spring.banner.location=classpath:bannertest.txt
mybanner.version=1.0.0
say=hello world
bannertest.txt:
_________ _______ ________ _________ ___ ___
|\___ ___\\ ___ \ |\ ____\|\___ ___\\ \ |\ \
\|___ \ \_\ \ __/|\ \ \___|\|___ \ \_\ \ \\_\ \
\ \ \ \ \ \_|/_\ \_____ \ \ \ \ \ \______ \
\ \ \ \ \ \_|\ \|____|\ \ \ \ \ \|_____|\ \
\ \__\ \ \_______\____\_\ \ \ \__\ \ \__\
\|__| \|_______|\_________\ \|__| \|__|
\|_________|
MANIFEST.MF版本号:${application.version}
MANIFEST.MF格式化版本号:${application.formatted-version}
SpringBoot版本号:${spring-boot.version}
SpringBoot格式化版本号:${spring-boot.formatted-version}
MANIFEST.MF里的title:${application.title}
配置文件application.properties里定义的参数:
mybanner.version:${mybanner.version}
say:${say}
打印结果:
springboot提供了3个枚举用来设置banner.txt里字符的颜色、背景色、字体:
使用${AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME} 可设置从标签开始到banner结束的颜色和字体,除非后面遇到下一个同类标签才会改变;
例如:
banner文本:
_________ _______ ________ _________ ___ ___
|\___ ___\\ ___ \ |\ ____\|\___ ___\\ \ |\ \
\|___ \ \_\ \ __/|\ \ \___|\|___ \ \_\ \ \\_\ \
\ \ \ \ \ \_|/_\ \_____ \ \ \ \ \ \______ \
\ \ \ \ \ \_|\ \|____|\ \ \ \ \ \|_____|\ \
\ \__\ \ \_______\____\_\ \ \ \__\ \ \__\
\|__| \|_______|\_________\ \|__| \|__|
\|_________|
MANIFEST.MF版本号:${application.version}
MANIFEST.MF格式化版本号:${application.formatted-version}
SpringBoot版本号:${spring-boot.version}
SpringBoot格式化版本号:${spring-boot.formatted-version}
MANIFEST.MF里的title:${application.title}
配置文件application.properties里定义的参数:
mybanner.version:${mybanner.version}
say:${say}
${AnsiColor.RED}红色字红色字1234 ${AnsiColor.GREEN}绿色字绿色字1234 ${AnsiColor.BLUE}蓝色字蓝色字1234
${AnsiBackground.YELLOW}黄色背景@@@ ${AnsiBackground.CYAN}青色背景@@@ ${AnsiBackground.BRIGHT_BLUE}亮蓝色背景@@@ 后面加空格
${AnsiColor.BRIGHT_GREEN}${AnsiBackground.BRIGHT_CYAN}------------后-面-改-为-亮-绿-色-字-和-亮-青-色-背-景------------
${AnsiStyle.BOLD}BOLD ${AnsiStyle.FAINT}FAINT ${AnsiStyle.ITALIC}ITALIC ${AnsiStyle.UNDERLINE}UNDERLINE
${AnsiColor.DEFAULT}${AnsiBackground.DEFAULT}${AnsiStyle.NORMAL}还原到默认字还原到默认字还原到默认字
运行结果: