SpringBoot(一)Spring WebFlux使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Suubyy/article/details/83998107

Spring WebFlux定义

Spring WebFlux是随着Spring 5.0版本推出来的响应式Web框架,它与SpringMVC的区别是不需要ServletAPI,完全是一种异步非阻塞的Web框架。非阻塞方式可以利用较小的线程或者硬件资源实现高并发进而提供系统性能,因为Spring5.0以后必须使用Java8函数式编程风格,而且Spring WebFlux支持Java8的函数式编程风格。

添加POM依赖

<!--如果pom文件有spring-boot-starter-web支持,一定要注释掉,因为不注释掉默认的还是SpringMvc而不是WebFlux-->
<!--
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 -->

<!--WebFlux依赖-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

编写代码

package com.lyz.project.controller;

import com.lyz.project.entity.MyConfigBean;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;

/**
 * 类的注释
 *
 * @Package com.lyz.project.controller
 * @ClassName UserWebFluxController
 * @Description
 * @Author liyuzhi
 * @Date 2018-11-12 19:26
 */
@Component
public class UserWebFluxController {

    private final MyConfigBean myConfigBean;

    public UserWebFluxController(MyConfigBean myConfigBean) {
        this.myConfigBean = myConfigBean;
    }

    public Mono<ServerResponse> queryUser(ServerRequest request) {
        myConfigBean.setUsername("queryUser");
        Mono<MyConfigBean> myConfigBeanMono = Mono.just(myConfigBean);
        return ServerResponse.ok().body(myConfigBeanMono, MyConfigBean.class);
    }

    public Mono<ServerResponse> delUser(ServerRequest request) {
        myConfigBean.setUsername("delUser");
        Mono<MyConfigBean> myConfigBeanMono = Mono.just(myConfigBean);
        return ServerResponse.ok().body(myConfigBeanMono, MyConfigBean.class);
    }
}


package com.lyz.project.web;

import com.lyz.project.controller.UserWebFluxController;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerResponse;

import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
import static org.springframework.web.reactive.function.server.RequestPredicates.accept;
import static org.springframework.web.reactive.function.server.RouterFunctions.route;

/**
 * 类的注释
 *
 * @Package com.lyz.project.web
 * @ClassName MyBeanConfigRouter
 * @Description
 * @Author liyuzhi
 * @Date 2018-11-12 19:35
 */
@Configuration
public class MyBeanConfigRouter {

    @Bean
    public RouterFunction<ServerResponse> monoRouterFunction(UserWebFluxController userWebFluxController) {
        return route(GET("/getUser").and(accept(APPLICATION_JSON)), userWebFluxController::queryUser)
                .andRoute(GET(("/delUser")).and(accept(APPLICATION_JSON)), userWebFluxController::delUser);
    }
}

猜你喜欢

转载自blog.csdn.net/Suubyy/article/details/83998107
今日推荐