基于注解编程模型实现 Spring WebFlux
使用注解编程模型实现 Spring WebFlux 和使用 Spring MVC 类似,只需把相关依赖添加到项目中。
Spring MVC 和 Spring WebFlux 均能使用注解驱动 Controller,然而不同点在于并发模型和阻塞特性。Spring MVC 通常是基于Servlet 和Tomcat,因此,可能被当前线程阻塞,Spring WebFlux 通常是非阻塞服务,基于 Reactor 和 Netty,不会发生阻塞。
代码实现步骤:
1、创建Springboot项目,添加相关的依赖
<!--webflux依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.6.3</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
2、编写配置文件
设置项目运行端口号:
server.port=8081
3、编写文件目录结构
实体类:User
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
service层接口:UserService
public interface UserService {
//根据id查询,返回一个或0个使用 Mono
Mono<User> queryById(int id);
//查询所有,返回多个使用 Flux
Flux<User> query();
//添加用户
Mono<Void> insert(Mono<User> user);
}
接口实现类:UserServiceImpl
与 springmvc 相比较这里不一样,因此在能熟练运用springmvc的情况下使用SpringWebflux,应该还是比较容易
@Service
public class UserServiceImpl implements UserService {
private final Map<Integer,User> users = new HashMap<>();
//模拟数据
public UserServiceImpl(){
this.users.put(1,new User(1,"wanli",3));
this.users.put(2,new User(2,"haoming",4));
this.users.put(3,new User(3,"shenming",5));
}
@Override
public Mono<User> queryById(int id) {
return Mono.justOrEmpty(users.get(id));
}
@Override
public Flux<User> query() {
return Flux.fromIterable(users.values());
}
@Override
public Mono<Void> insert(Mono<User> user1) {
//doOnNext:调用Subscriber.onNext的回调
return user1.doOnNext(person ->{
int id = users.size() + 1;
users.put(id,person);//添加数据
}).thenEmpty(Mono.empty());//操作完后清空序列,是一个终止信号
}
}
控制层:UserController,在控制层代码的编写和注解的使用方面,可以看出 Spring WebFlux 和 Spring MVC 一模一样。
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/queryById/{id}")
public Mono<User> queryById(@PathVariable int id){
return userService.queryById(id);
}
@GetMapping("/query")
public Flux<User> query(){
return userService.query();
}
@PostMapping("/insert")
public Mono<Void> insert(@RequestBody User user){
//创建Flux序列,并声明数据流
Mono<User> just = Mono.just(user);
return userService.insert(just);
}
}
4、测试,启动项目使用 postman 进行测试
查询id为1的用户信息:

查询所有用户信息:

本文介绍如何使用注解编程模型实现Spring WebFlux,包括项目搭建、依赖配置、服务接口定义及其实现,最后通过Postman进行测试验证。
1003

被折叠的 条评论
为什么被折叠?



