ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Boot 自定义启动图案

2022-01-10 15:01:22  阅读:123  来源: 互联网

标签:environment String 自定义 ## Spring Boot banner Banner public


Spring Boot在启动的时候会打印一个默认的SpringBoot的图案

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

打印图案的行为由SpringApplicationBannerPrinter控制,要打印的图案通过getBanner()获取Banner并打印。

  1. 首先通过文件控制图案,检查是否存在banner文件,存在则构建ImageBanner和ResourceBanner去打印
  2. 其次通过自定义的Banner 实现类控制图案,注入fallbackBanner进行打印。
  3. 最后使用默认的SpringBootBanner打印默认图案

private Banner getBanner(Environment environment, Banner definedBanner) {
    //1、文件控制图案
	Banners banners = new Banners();
	banners.addIfNotNull(getImageBanner(environment));
	banners.addIfNotNull(getTextBanner(environment));
	if (banners.hasAtLeastOneBanner()) {
		return banners;
	}
    //2.自定义的Banner 实现类控制图案
	if (this.fallbackBanner != null) {
		return this.fallbackBanner;
	}
    //默认的SpringBootBanner
	return DEFAULT_BANNER;
}

private static class Banners implements Banner {

	private final List<Banner> banners = new ArrayList<Banner>();

	public void addIfNotNull(Banner banner) {
		if (banner != null) {
			this.banners.add(banner);
		}
	}

	public boolean hasAtLeastOneBanner() {
		return !this.banners.isEmpty();
	}

	@Override
	public void printBanner(Environment environment, Class<?> sourceClass,
							PrintStream out) {
		for (Banner banner : this.banners) {
			banner.printBanner(environment, sourceClass, out);
		}
	}

}

文件控制图案

通过文件控制图案的方式里,会到配置文件 application.proeprties 里根据spring.banner.locationspring.banner.image.location找到文件和图片文档地址,如果没有就到classpath目录下找默认的banner.txt和banner.gif/banner.jpg/banner.png,默认文件也没有就返回null不采用文件内容控制,图片会根据颜色深度转成字符图案。

/* SpringApplicationBannerPrinter.java
 */
static final String BANNER_LOCATION_PROPERTY = "banner.location";
static final String DEFAULT_BANNER_LOCATION = "banner.txt";
private Banner getTextBanner(Environment environment) {
	String location = environment.getProperty(BANNER_LOCATION_PROPERTY,
											  DEFAULT_BANNER_LOCATION);
	Resource resource = this.resourceLoader.getResource(location);
	if (resource.exists()) {
		return new ResourceBanner(resource);
	}
	return null;
}

static final String BANNER_IMAGE_LOCATION_PROPERTY = "banner.image.location";
static final String[] IMAGE_EXTENSION = { "gif", "jpg", "png" };
private Banner getImageBanner(Environment environment) {
	String location = environment.getProperty(BANNER_IMAGE_LOCATION_PROPERTY);
	if (StringUtils.hasLength(location)) {
		Resource resource = this.resourceLoader.getResource(location);
		return (resource.exists() ? new ImageBanner(resource) : null);
	}
	for (String ext : IMAGE_EXTENSION) {
		Resource resource = this.resourceLoader.getResource("banner." + ext);
		if (resource.exists()) {
			return new ImageBanner(resource);
		}
	}
	return null;
}

自定义Banner

定制化 ASCII 字符:http://network-science.de/ascii/
定制化 ASCII 图片:https://www.degraeve.com/img2txt.php

新建类实现Banner并实现printBanner方法

import java.io.PrintStream;

import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;

public class HelloBanner implements Banner
{

    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {

        String banner = "##     ## ######## ##       ##        #######  \r\n"
                + "##     ## ##       ##       ##       ##     ## \r\n"
                + "##     ## ##       ##       ##       ##     ## \r\n"
                + "######### ######   ##       ##       ##     ## \r\n"
                + "##     ## ##       ##       ##       ##     ## \r\n"
                + "##     ## ##       ##       ##       ##     ## \r\n"
                + "##     ## ######## ######## ########  #######  ";

        out.println(banner);
    }
}

SpringApplication设置banner

@SpringBootApplication
public class Application
{
    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(Application.class);
        springApplication.setBanner(new MyBanner());
        springApplication.run(args);
    }
}

关闭Banner

Banner有三种打印模式,默认是CONSOLE打印到控制台。

public interface Banner {
	enum Mode {
		OFF,
		CONSOLE,
		LOG
	}
}

如果要关闭打印图案,在SpringBootApplication中后缀.bannerMode(Banner.Mode.OFF)

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).bannerMode(Banner.Mode.OFF)
                .run(args);
    }

}

也可以在配置文件中配置spring.main.banner-mode=off关闭

标签:environment,String,自定义,##,Spring,Boot,banner,Banner,public
来源: https://www.cnblogs.com/brewin/p/15783568.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有