SpringBoot 整合 Spring WebFlux

WebFlux

描述

Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版本中添加的。它是完全非阻塞的,支持 Reactive Streams背压,并在 Netty、Undertow 和 Servlet 3.1+ 容器等服务器上运行。

官方文档: SpringWebFlux

概述

为什么创建 Spring WebFlux?

部分答案是需要一个非阻塞的 Web 堆栈来处理具有少量线程的并发并使用较少的硬件资源进行扩展。Servlet 3.1 确实为非阻塞 I/O 提供了 API。但是,使用它会远离 Servlet API 的其余部分,其中契约是同步 ( Filter, Servlet) 或阻塞 ( getParameter, getPart)。这是一个新的通用 API 作为任何非阻塞运行时的基础的动机。这很重要,因为服务器(例如 Netty)在异步、非阻塞空间中建立良好。

答案的另一部分是函数式编程。就像 Java 5 中添加注释创造了机会(例如带注释的 REST 控制器或单元测试)一样,Java 8 中添加的 lambda 表达式为 Java 中的函数式 API 创造了机会。这对于允许异步逻辑的声明式组合的非阻塞应用程序和延续式 API(由CompletableFutureReactiveX推广)是一个福音。在编程模型级别,Java 8 使 Spring WebFlux 能够提供功能性 Web 端点以及带注释的控制器。

并发模型

Spring MVC 和 Spring WebFlux 都支持带注释的控制器,但在并发模型和阻塞和线程的默认假设上有一个关键的区别。

在 Spring MVC(以及一般的 servlet 应用程序)中,假设应用程序可以阻塞当前线程(例如,用于远程调用)。出于这个原因,servlet 容器在请求处理期间使用一个大型线程池来吸收潜在的阻塞。

在 Spring WebFlux(以及一般的非阻塞服务器)中,假设应用程序不会阻塞。因此,非阻塞服务器使用一个小的、固定大小的线程池(事件循环工作者)来处理请求。

整合

pom.xml

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-webflux</artifactId>
		</dependency>

yml配置: 加入 mybatis 操作数据库:

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost/user?serverTimezone=UTC&useSSL=false&allowMultiQueries=true
    driver-class-name: com.mysql.cj.jdbc.Driver
## 服务端口
server:
  port: 8080

##扫描的xml 路径和 实体类
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml,
  type-aliases-package: com.example.springbootwebfluxintegrat.bean

UserController 控制层:

    @Autowired
    private IUserService iUserService;

    /**
     * 获取用户信息:
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    public Mono<User> getUser(Integer userId) {
        return Mono.just(iUserService.getById(userId));
    }

    /**
     * 删除用户信息:
     * @param userId
     */
    @DeleteMapping("/deleteUser")
    public void deleteUser(Long userId) {
        iUserService.removeById(userId);
    }


    @GetMapping("list")
    public Flux<List<User>> list(){
        return Flux.just(iUserService.list());
    }


    /**
     * 分页列表查询:
     * @param page
     * @param rows
     * @return
     */
    @GetMapping("getPageUser")
    public Flux<IPage<User>> getPageUser(Integer page, Integer rows){
        Page<User> userPage = new Page<User>();
        userPage.setCurrent(page);
        userPage.setSize(rows);
        IPage<User> userIPage = iUserService.selectUserPage(userPage);
        return Flux.just(userIPage);
    }

实例代码在github上面需要的请自行拉取:spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。后续会集成更多的接口实现,有需要的请保存。

如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot中整合WebFlux并实现WebSocket服务器,可以按照以下步骤进行操作: 1. 创建一个Spring Boot项目:使用Spring Initializr或手动创建一个基于Spring Boot的项目。 2. 添加依赖:在项目的pom.xml(Maven)或build.gradle(Gradle)文件中添加以下依赖项: ```xml <!-- Spring Boot WebFlux --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <!-- Spring Boot WebSocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 3. 创建WebSocket处理器:创建一个WebSocket处理器类,实现`WebSocketHandler`接口。该处理器将处理WebSocket连接的打开、关闭以及消息传递等操作。 ```java import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.reactive.socket.WebSocketMessage; import org.springframework.web.reactive.socket.WebSocketSession; import reactor.core.publisher.Mono; public class MyWebSocketHandler implements WebSocketHandler { @Override public Mono<Void> handle(WebSocketSession session) { // 处理WebSocket连接的逻辑 return session.send( session.receive() .map(WebSocketMessage::getPayloadAsText) .map(session::textMessage) ); } } ``` 4. 配置WebSocket路由:创建一个配置类,配置WebSocket的路由和处理器。 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.config.EnableWebFlux; import org.springframework.web.reactive.config.WebFluxConfigurer; import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping; import org.springframework.web.reactive.socket.server.support.WebSocketHandlerAdapter; import java.util.HashMap; import java.util.Map; @Configuration @EnableWebFlux public class WebSocketConfig implements WebFluxConfigurer { @Bean public WebSocketHandlerAdapter handlerAdapter() { return new WebSocketHandlerAdapter(); } @Bean public SimpleUrlHandlerMapping handlerMapping() { Map<String, WebSocketHandler> map = new HashMap<>(); map.put("/websocket", new MyWebSocketHandler()); SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); mapping.setOrder(1); mapping.setUrlMap(map); return mapping; } } ``` 5. 启动应用程序:启动Spring Boot应用程序,WebSocket服务器将在`/websocket`路径下监听连接。 现在,你已经成功地在Spring Boot中整合WebFlux并实现了一个简单的WebSocket服务器。你可以使用前端代码(如JavaScript)来连接并测试WebSocket服务器。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值