Java基础、中级、高级、架构面试资料

说一说SpringBootTest.WebEnvironment

JAVA herman 7646浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

先说一说学习方法。很多时候,我们遇到问题了都会先去百度,但是百度出来的文章不一定全对,而且技术,质量参差不齐。这个时候最好的办法是去查看官方文档,当然我们也完全不能保证官方的文档就一定正确。但我们还是应该相信官方文档,然后结合上下文来确定正确的用法。

今天周六,我在带娃,不能兼顾到大家,请互相谅解。平时也有不少网友私信我,问一些技术问题,但我个人的时间和精力都非常的有限。平时多积累知识,遇到问题才能游刃有余!

抽个时间,我来说说标题中的 SpringBootTest.WebEnvironment。

看字面意思就应该猜出个大半,它是 SpringBoot 的测试时,用来指定 web 环境的。

SpringBootTest.WebEnvironment 中一共有 4 个枚举值。

  • DEFINED_PORT:创建一个(reactive) web 应用程序上下文,使用默认端口。针对这个属性,网上翻译的解读比较多,错误的也多。
  • MOCK:MOCK 是用的比较多的一个属性。它会判断,当你使用 servlet API 时,则使用模拟 servlet 环境创建 WebApplicationContext;如果是使用 WebFlux,则使用 ReactiveWebApplicationContext;否则,使用常规的 ApplicationContext。
  • NONE:这个也有很多人理解错误,其实它主要是表示,它不会指定 SpringApplication.setWebApplicationType。以非 Web 环境来运行。也就是非 Servlet 和 Reactive 环境。
  • RANDOM_PORT:创建一个 web 应用程序上下文,可以是 reactive,也可以是 servlet。它将随机起一个端口并监听。到底是 reactive 还是 Servlet,它会自己根据上下文来判断。

有些人认为,Mock 和 NONE 的作用重复了,其实并没有。

WebApplicationType 的类型有 3 种。

  • WebApplicationType.REACTIVE:Web Reactive
  • WebApplicationType.SERVLET:Web Servlet
  • WebApplicationType.NONE:非 Web
static WebApplicationType deduceFromClasspath() {
	if (ClassUtils.isPresent(WEBFLUX_INDICATOR_CLASS, null)
			&& !ClassUtils.isPresent(WEBMVC_INDICATOR_CLASS, null)
			&& !ClassUtils.isPresent(JERSEY_INDICATOR_CLASS, null)) {
		return WebApplicationType.REACTIVE;
	}
	for (String className : SERVLET_INDICATOR_CLASSES) {
		if (!ClassUtils.isPresent(className, null)) {
			return WebApplicationType.NONE;
		}
	}
	return WebApplicationType.SERVLET;
}

最后说一点,还有不少人的文章说,SpringBootTest.WebEnvironment.RANDOM_PORT 必须或通常和 @LocalServerPort 一起使用。官方文档并没有这么说,我本人就很少使用 @LocalServerPort。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 说一说SpringBootTest.WebEnvironment