Banner personalizado para SpringBoot Source Analysis

1. ¿Qué es Banner?

Cuando iniciamos una aplicación SpringBoot, a menudo vemos la siguiente impresión en la consola

  .   ____          _            __ _ _

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  '  |____| .__|_| |_|_| |_\__, | / / / /

 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::        (v2.1.6.RELEASE)

El resultado es Banner, que parece el logotipo de un proyecto.

En segundo lugar, cómo personalizar Banner

¿Qué debo hacer si quiero que el banner de mi proyecto imprima los patrones que quiero: como el LOGOTIPO de la empresa, etc.?

Es muy simple, simplemente cree un archivo llamado banner.txt en el directorio / src / main / resources del proyecto SpringBoot , de modo que el contenedor imprima el texto de este archivo en la consola cuando se inicie.

Entonces, ¿cómo dibujar algunos patrones? Hay muchos sitios web prefabricados que admiten el diseño de banners, puede consultar

1.http: //patorjk.com/software/taag

Ingrese texto para convertir

2.http: //www.network-science.de/ascii/

Ingrese texto para convertir

3.http: //www.degraeve.com/img2txt.php

Puede convertir una imagen en una imagen en formato de texto

imagen

imagen

Tres, análisis de código fuente

Entonces, ¿cómo se implementa SpringBoot?

En el método de ejecución de SpringApplication, hay una línea de Banner PrintedBanner = printBanner (entorno); Obtenga e imprima el banner en este método.

SpringApplication.printBanner

private Banner printBanner(ConfigurableEnvironment environment) {

    检查打印Banner的开关是否启

 if (this.bannerMode == Banner.Mode.OFF) {

 return null;

 }

 ResourceLoader resourceLoader = (this.resourceLoader != null) ? this.resourceLoader

   : new DefaultResourceLoader(getClassLoader());

 //准备printer

 SpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter(resourceLoader, this.banner);

 //打印在日志中

 if (this.bannerMode == Mode.LOG) {

 return bannerPrinter.print(environment, this.mainApplicationClass, logger);

 }

 //打印在控制台

 return bannerPrinter.print(environment, this.mainApplicationClass, System.out);

}

Hay tres Banner.Mode:

  • APAGADO Sin salida de banner de ninguna forma

  • CONSOLA Imprime el banner en la consola

  • REGISTRO Imprimir Banner al archivo de registro

El tipo Banner.Mode predeterminado en SpringApplication es CONSOLE.

ResourceLoader es una interfaz de estrategia proporcionada por Spring para obtener recursos bajo el classpath o directorio de recursos. Después de obtener ResourceLoader, empaquételo como SpringApplicationBannerPrinter. Luego llame a su método de impresión.

SpringApplicationBannerPrinter.print

public Banner print(Environment environment, Class<?> sourceClass, PrintStream out) {

    //获取banner

 Banner banner = getBanner(environment);

 //打印banner

 banner.printBanner(environment, sourceClass, out);

 return new PrintedBanner(banner, sourceClass);

}

SpringApplicationBannerPrinter.getBanner

private Banner getBanner(Environment environment) {

 Banners banners = new Banners();

 banners.addIfNotNull(getImageBanner(environment));

 banners.addIfNotNull(getTextBanner(environment));

 if (banners.hasAtLeastOneBanner()) {

 return banners;

 }

 if (this.fallbackBanner != null) {

 return this.fallbackBanner;

 }

 return DEFAULT_BANNER;

}

Desde el código getBanner, no solo admite banners en formato txt, sino que también admite banners de recursos de imágenes. Al observar la implementación del método getImageBanner (entorno), puede ver que SpringBoot obtendrá la ruta de la imagen de la propiedad spring.banner.image.location, admitirá gif, jpg y png, y luego la encapsulará como ImageBanerr. Entre ellos, los banners esencialmente mantienen una lista de banners. Imprime iterativamente cuando realmente imprime.

SpringApplicationBannerPrinter.printBanner

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

 for (Banner banner : this.banners) {

   banner.printBanner(environment, sourceClass, out);

 }

 }

Todas las botas de resorte también admiten la impresión de varios carteles.

Cuatro, resumen del código fuente

Podemos saber más sobre el soporte de banners en el código fuente, que se enumerará a continuación.

  • Para personalizar el banner de forma predeterminada, solo necesita colocar un archivo banner.txt en el directorio de recursos. Si no desea nombrarlo banner.txt, puede especificar el atributo spring.banner.location como el nombre del archivo personalizado.

  • Soporte de banner de recursos de imagen. Especifique la propiedad spring.banner.image.location como ruta del recurso de imagen

  • SpringBoot admite la configuración del formato txt y el banner de formato de imagen al mismo tiempo, y la impresión al mismo tiempo.

Supongo que te gusta

Origin blog.csdn.net/qq_46388795/article/details/109049278
Recomendado
Clasificación