SpringWebflux 实现方式有两种:注解编程模型和函数式编程模型
    使用注解编程模型方式,和之前 SpringMVC 使用相似的,只需要把相关依赖配置到项目中,
    SpringBoot 自动配置相关运行容器,默认情况下使用 Netty 服务器
    第一步 创建 SpringBoot 工程,引入 Webflux 依赖
    image.png
    image.png
    第二步 配置启动端口号
    image.png
    第三步 创建包和相关类

    • 实体类


    image.png
    创建接口定义操作的方法

    1. //用户操作接口
    2. public interface UserService {
    3. //根据 id 查询用户
    4. Mono<User> getUserById(int id);
    5. //查询所有用户
    6. Flux<User> getAllUser();
    7. //添加用户
    8. Mono<Void> saveUserInfo(Mono<User> user);
    9. }
    • 接口实现类

      public class UserServiceImpl implements UserService {
         //创建 map 集合存储数据
         private final Map<Integer,User> users = new HashMap<>();
             public UserServiceImpl() {
             this.users.put(1,new User("lucy","nan",20));
             this.users.put(2,new User("mary","nv",30));
             this.users.put(3,new User("jack","nv",50));
         }
      
         //根据 id 查询
         @Override
         public Mono<User> getUserById(int id) {
             return Mono.justOrEmpty(this.users.get(id));
         }
      
         //查询多个用户
         @Override
         public Flux<User> getAllUser() {
             return Flux.fromIterable(this.users.values());
         }
      
         //添加用户
         @Override
         public Mono<Void> saveUserInfo(Mono<User> userMono) {
             return userMono.doOnNext(person -> {
                 //向 map 集合里面放值
                 int id = users.size()+1;
                 users.put(id,person);
             }).thenEmpty(Mono.empty());
         }
      }
      
    • 创建 controller

      @RestController
      public class UserController {
         //注入 service
         @Autowired
         private UserService userService;
      
         //id 查询
         @GetMapping("/user/{id}")
         public Mono<User> geetUserId(@PathVariable int id) {
                 return userService.getUserById(id);
         }
      
         //查询所有
         @GetMapping("/user")
         public Flux<User> getUsers() {
             return userService.getAllUser();
         }
      
         //添加
         @PostMapping("/saveuser")
         public Mono<Void> saveUser(@RequestBody User user) {
             Mono<User> userMono = Mono.just(user);
             return userService.saveUserInfo(userMono);
         } 
      }
      

      ⚫ 说明
      SpringMVC 方式实现,同步阻塞的方式,基于 SpringMVC+Servlet+Tomcat
      SpringWebflux 方式实现,异步非阻塞 方式,基于 SpringWebflux+Reactor+Netty