Springboot banner
Banner的实现类如下:
- SpringBootBanner:Banner的默认实现类
- ImageBanner:用来打印图片日志的banner
- ResourceBanner:资源Banner
Springboot在启动的时候,默认情况下会打印如下信息
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.5.RELEASE)
可以分析源码看看为什么打印如下日志
SpringApplication中run方法 public ConfigurableApplicationContext run(String... args) { ... Banner printedBanner = printBanner(environment); .... return context; }
调用printBanner(ConfigurableEnvironment environment)的方法
private Banner printBanner(ConfigurableEnvironment environment) { if (this.bannerMode == Banner.Mode.OFF) { return null; } //获取资源加载 ResourceLoader resourceLoader = (this.resourceLoader != null) ? this.resourceLoader : new DefaultResourceLoader(getClassLoader()); //创建SpringApplicationBannerPrinter对象 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); }
Banner print(Environment environment, Class<?> sourceClass, PrintStream out) { //获取Banner Banner banner = getBanner(environment); //打印Banner banner.printBanner(environment, sourceClass, out); return new PrintedBanner(banner, sourceClass); }
getBanner(Environment environment)方法
private Banner getBanner(Environment environment) { Banners banners = new Banners(); //添加ImageBanner banners.addIfNotNull(getImageBanner(environment)); //添加TextBanner banners.addIfNotNull(getTextBanner(environment)); if (banners.hasAtLeastOneBanner()) { return banners; } if (this.fallbackBanner != null) { return this.fallbackBanner; } return DEFAULT_BANNER; }
static final String BANNER_IMAGE_LOCATION_PROPERTY = "spring.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; } //获取banner.gif,banner.jpg,banner.png for (String ext : IMAGE_EXTENSION) { Resource resource = this.resourceLoader.getResource("banner." + ext); if (resource.exists()) { return new ImageBanner(resource); } } return null; }
static final String BANNER_LOCATION_PROPERTY = "spring.banner.location"; static final String DEFAULT_BANNER_LOCATION = "banner.txt"; private Banner getTextBanner(Environment environment) { //获取路径下的banner.txt; 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; }
通过上面的代码可以知道,如果在classpath路径下面添加了banner.txt,banner.jpg文件后,首先加载banner.jpg,然后加载banner.txt文件,后面都会打印出来。
下面通实现自己的Banner
@SpringBootApplication public class Application { public static void main(String[] args) { //SpringApplication.run(Application.class,args); SpringApplication application=new SpringApplication(Application.class); //关闭banner // application.setBannerMode(Banner.Mode.OFF); application.setBanner(new Mybanner()); application.run(args); // SpringApplicationBuilder applicationBuilder=new SpringApplicationBuilder(); // //applicationBuilder.profiles(""); // applicationBuilder.bannerMode(Banner.Mode.OFF).run(args); } }
public class Mybanner implements Banner { private static final String BANNER = "Spring Mybanner"; @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { System.out.println(BANNER); } }
相关源码:https://github.com/albert-liu435/rookies-springboot
来源:https://www.cnblogs.com/haizhilangzi/p/12443824.html