原创于 【模棱博客】 Spring Webflux和Spring Web是两个完全不同的Web栈。 然而, Spring Webflux继续支持基于注解的编程模型 使用这两个堆栈定义的端点可能看起来相似,但测试这种端点的方式是相当不同的,写这样一个端点的用户必须知道哪个堆栈处于活动状态并据此制定测试。 样品端点 考虑一个基于示例注释的端点: import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController data class Greeting(val message: String) @RestController @RequestMapping("/web") class GreetingController { @PostMapping("/greet") fun handleGreeting(@RequestBody greeting: Greeting): Greeting { return Greeting("Thanks: ${greeting.message}") } } 使用Spring Web进行测试 如果Spring Boot 2启动器用于使用Spring Web作为启动器创建此应用程序,则按以下方式使用Gradle构建文件指定: compile('org.springframework.boot:spring-boot-starter-web') 那么这样一个端点的测试将会使用一个Mock web运行时,被称为Mock MVC : import org.junit.Test import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest import org.springframework.test.context.junit4.SpringRunner import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post import org.springframework.test.web.servlet.result.MockMvcResultMatchers.content @RunWith(SpringRunner::class) @WebMvcTest(GreetingController::class) class GreetingControllerMockMvcTest { @Autowired lateinit var mockMvc: MockMvc @Test fun testHandleGreetings() { mockMvc .perform( post("/web/greet") .content(""" |{ |"message": "Hello Web" |} […]
View Details转自:百家号-薇薇心语 各位Javaer们,大家都在用SpringMVC吧?当我们不亦乐乎的用着SpringMVC框架的时候,Spring5.x又悄(da)无(zhang)声(qi)息(gu)的推出了Spring WebFlux。web? 不是已经有SpringMVC这么好用的东西了么,为啥又冒出个WebFlux? 这玩意儿是什么鬼? Spring WebFlux特性 特性一 异步非阻塞 众所周知,SpringMVC是同步阻塞的IO模型,资源浪费相对来说比较严重,当我们在处理一个比较耗时的任务时,例如:上传一个比较大的文件,首先,服务器的线程一直在等待接收文件,在这期间它就像个傻子一样等在那儿(放学别走),什么都干不了,好不容易等到文件来了并且接收完毕,我们又要将文件写入磁盘,在这写入的过程中,这根线程又再次懵bi了,又要等到文件写完才能去干其它的事情。这一前一后的等待,不浪费资源么? 没错,Spring WebFlux就是来解决这问题的,Spring WebFlux可以做到异步非阻塞。还是上面那上传文件的例子,Spring WebFlux是这样做的:线程发现文件还没准备好,就先去做其它事情,当文件准备好之后,通知这根线程来处理,当接收完毕写入磁盘的时候(根据具体情况选择是否做异步非阻塞),写入完毕后通知这根线程再来处理(异步非阻塞情况下)。这个用脚趾头都能看出相对SpringMVC而言,可以节省系统资源。666啊,有木有! 特性二 响应式(reactive)函数编程 如果你觉得java8的lambda写起来很爽,那么,你会再次喜欢上Spring WebFlux,因为它支持函数式编程,得益于对于reactive-stream的支持(通过reactor框架来实现的),喜欢java8 stream的又有福了。为什么要函数式编程? 这个别问我,我也不知道,或许是因为bi格高吧,哈哈,开玩笑啦。 特性三 不再拘束于Servlet容器 以前,我们的应用都运行于Servlet容器之中,例如我们大家最为熟悉的Tomcat, Jetty…等等。而现在Spring WebFlux不仅能运行于传统的Servlet容器中(前提是容器要支持Servlet3.1,因为非阻塞IO是使用了Servlet3.1的特性),还能运行在支持NIO的Netty和Undertow中。 所以,看完Spring WebFlux的新特性之后,内心五味杂陈的我,只能用一个表情来形容: 以上就是Spring WebFlux的主要的三大特性,当然,只是简单的介绍了一下,可能有些javaer对特性一中的所谓的IO模型这个还比较模糊,不要着急,下一次,咱就再介绍一下IO模型,这对后面理解这个框架是很有帮助的。Spring WebFlux是基于reactor框架之上的,reactor框架是对reactive-stream的实现,因此,后面还会详细介绍这两个东西,为了去理解Spring WebFlux框架的源码。 好啦,本篇是《深入浅出Spring Webflux系列》的第一篇,就到此结束啦。 我对自己的表现很满意,因为在没包含一行代码的情况下,居然把口水话都凑足了这么多字,哈哈。。。 另外,还是要到个歉,之前因为账号被盗,文章被人删除了,然后还乱发了几篇什么杂七杂八的广告文,问过头条客服,说不能恢复被删除的文章,这小心脏因此被伤了,所以连续半年多都没来更新了。 接下来,将更新《深入浅出Spring Webflux系列》等一系列文章,然后可能是JVM调优相关,到时候具体再看情况。 from:https://www.cnblogs.com/z-test/p/9438455.html
View Details