Spring WebFlux是非阻塞式的,支持 Reactive Streams背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。其目前只支持非关系型数据库,如Mongo,Redis等。非阻塞式的编程模型可以提高程序的并发量,提升性能和吞吐量。
简易理解,web的异步请求,像rxjava2, continues等
本篇用于记录一段简单使用的示例
首先就是需要安装MongoDB,此处略过
库包
接下来就是添加依赖库,包括webflux
和mongodb
1 2 3 4 5 6 7 8 9 10
| <!-- webflux --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <!-- mongodb --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency>
|
配置
添加application.yml
配置,这里多添加了一条显示NoSql查询语句,当遇到错误时候很管用,建议写上
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| spring: data: mongodb: host: localhost port: 27017 database: webflux
logging: level: org: springframework: data: mongodb: core: DEBUG
|
实用
在Application添加@EnableReactiveMongoRepositories
1 2 3 4 5 6 7 8
| @SpringBootApplication @EnableReactiveMongoRepositories public class SampleApplication {
public static void main(String[] args) { SpringApplication.run(SampleApplication.class, args); } }
|
通过继续ReactiveMongoRepository
编写访问实例,这里和JPA的很像
1 2 3
| @Repository public interface MongoRepository extends ReactiveMongoRepository<MongoUser, String> { }
|
添加Controller实现接口,实现了普通回调及流式回调
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @RestController @RequestMapping("user") public class FluxController { @Resource private MongoRepository repository;
@GetMapping public Flux<MongoUser> getUsers() { return repository.findAll(); }
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<MongoUser> getUsersStream() { return repository.findAll(); } }
|
一次性回调访问结果:
多次回调访问结果
参考
https://mrbird.cc/Spring-Boot-WebFlux-CRUD.html
https://mrbird.cc/Spring-Boot-2-0-WebFlux.html
https://juejin.im/post/5b3a24386fb9a024ed75ab36