Spring Boot的Banner

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/02/21/spring-boot-banner/

Spring Boot应用在启动的时候会输出一个Banner,同时还会输出使用的Spring Boot的版本。

默认的Banner如下

spring-default-banner

如果你需要自己替换的话可以放置一个banner.txt文件,这样Spring Boot就会使用自定义的banner,而不是默认的banner。

Spring Banner的选择逻辑

Banner的优先级和具体逻辑在SpringApplication中。

	private Banner selectBanner(Environment environment) {
		String location = environment.getProperty(BANNER_LOCATION_PROPERTY,
				BANNER_LOCATION_PROPERTY_VALUE);
		ResourceLoader resourceLoader = this.resourceLoader != null ? this.resourceLoader
				: new DefaultResourceLoader(getClassLoader());
		Resource resource = resourceLoader.getResource(location);
		if (resource.exists()) {
			return new ResourceBanner(resource);
		}
		if (this.banner != null) {
			return this.banner;
		}
		return DEFAULT_BANNER;
	}

尝试去加载自定义的banner,如果没有那么返回默认的。

默认的banner是SpringBootBanner,定义为

private static final String[] BANNER = { "",
			"  .   ____          _            __ _ _",
			" /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\",
			"( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\",
			" \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )",
			"  '  |____| .__|_| |_|_| |_\\__, | / / / /",
			" =========|_|==============|___/=/_/_/_/" };

当然,你也可以直接关闭banner的输出,在createAndRefreshContext方法中

if (this.bannerMode != Banner.Mode.OFF) {
			printBanner(environment);
		}

当然这些都可以通过配置文件控制的。

Remote模式的banner

Spring Boot通过集成crash提供了Remote Shell,这样用户可以通过ssh直接登录。

在Remote模式下也是有banner的,但是如果你配置了banner.txt文件,你会发现Remote模式下的banner依然是默认的Spring banner。

这是因为login.groovy中并没有实现banner的选择逻辑,而是直接硬编码了一个banner

welcome = { ->
	if (!crash.context.attributes['spring.environment'].getProperty("spring.main.show_banner", Boolean.class, Boolean.TRUE)) {
		return ""
	}

	// Resolve hostname
	def hostName;
	try {
		hostName = java.net.InetAddress.getLocalHost().getHostName();
	}
	catch (java.net.UnknownHostException ignore) {
		hostName = "localhost";
	}

	// Get Spring Boot version from context
	def version = crash.context.attributes.get("spring.boot.version")

	return """\
  .   ____          _            __ _ _
 /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
 \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v$version) on $hostName
""";
}

prompt = { ->
	return "> ";
}

还有一个可能的配置文件叫remote-banner.txt,但是它是应用于devtools的remote模式,并不是ssh登录的那个Remote模式。

所以目前而言,Remote模式是没有办法换Banner的,最好直接关闭。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/02/21/spring-boot-banner/

发表评论