Spring Boot之WebFlux+MongoDB

Spring WebFlux是非阻塞式的,支持 Reactive Streams背压,并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。其目前只支持非关系型数据库,如Mongo,Redis等。非阻塞式的编程模型可以提高程序的并发量,提升性能和吞吐量。

简易理解,web的异步请求,像rxjava2, continues等

本篇用于记录一段简单使用的示例

首先就是需要安装MongoDB,此处略过

库包

接下来就是添加依赖库,包括webfluxmongodb

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
# mongodb显示NoSql日志
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();
}

/**
* 以 Server sent events形式多次返回数据
*/
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<MongoUser> getUsersStream() {
return repository.findAll();
}
}

一次性回调访问结果:

result

多次回调访问结果
multi callback

参考

https://mrbird.cc/Spring-Boot-WebFlux-CRUD.html
https://mrbird.cc/Spring-Boot-2-0-WebFlux.html
https://juejin.im/post/5b3a24386fb9a024ed75ab36

文章作者: 二十I邊界
文章链接: https://xuie0000.com/post/2019-11-22-2019/Spring-Boot之WebFlux-MongoDB.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 二十I邊界