SpringBoot 2 webflux 牛刀小试

?springwebflux介绍SpringWebFlux是一个异步非阻塞式的Web框架 , 可以运行在支持Servlet3.1非阻塞IO的Servlet容器上 , 或者其他异步运行环境 , 如Netty、Undertow 。 它可以充分利用多核CPU资源去处理大量的并发请求 , 非常适合低延迟、高吞吐量的应用场景 。
简单的说就四点:异步非阻塞、响应式(reactive)函数编程、不再限制于Servlet容器、响应式(reactive)访问处理数据 。 废话有点多了 , 言归正传 , 今天我们将测试下在springboot2.x下测试webflux实现一个简单的Demo来实现Mysql数据库的访问并返回JSON数据 。
框架搭建【SpringBoot 2 webflux 牛刀小试】我们使用idea搭建一个初步的框架 , 新建工程->SpringInitializr , 输入groupId、artifactId等信息后 , 在依赖界面我们勾选SpringReactiveWeb、SpringDataR2DBC , 点击下一步直到工程建立完毕 。 (Postgres , MicrosoftSQLServer , MySQL , H2和GoogleSpanner)都有R2DBC驱动 , 很遗憾Mysql暂时还没有 , 本示例中我们采用第三方的r2dbc-mysql(dev.miku) 。 POM文件依赖项目配置如下:
org.springframework.bootspring-boot-starter-data-r2dbcio.r2dbcr2dbc-pooldev.mikur2dbc-mysqlorg.springframework.bootspring-boot-starter-webflux代码编写首先我们在springboot配置文件内增加R2DBC数据库的相关配置
spring.r2dbc.url=r2dbcs:mysql://127.0.0.1:3306/iotspring.r2dbc.username=rootspring.r2dbc.password=123456定义数据库访问接口 , 继承ReactiveCrudRepository , 在接口内我们可以通@Modifying@Query等注解自定义自己需要的方法
publicinterfaceSysUserRepositoryextendsReactiveCrudRepository{}实现业务层相关方法 , 返回单个指定的用户和所有用户列表数据
@ServicepublicclassSysUserServiceImplimplementsSysUserService{@AutowiredprivateSysUserSortingRepositorysysUserSortingRepository;@OverridepublicMonofindUserById(StringuserId){returnsysUserSortingRepository.findById(userId);}@OverridepublicFluxfindAll(){returnsysUserSortingRepository.findAll();}}定义控制层 , 暴露接口展示相关数据
@RestController@RequestMapping("/user")publicclassSysUserController{@AutowiredprivateSysUserServicesysUserService;/***返回指定用户*@paramid用户id*@returnMono*/@GetMapping("/{id}")publicMonofindUserById(@PathVariableStringid){returnsysUserService.findUserById(id);}/***返回所有用户*@returnFlux*/@GetMapping("/all")publicFluxfindUserById(){returnsysUserService.findAll();}}我们启动服务 , 看下运行效果 , 我们可以看到服务运行在Netty内 , 不再是默认的tomact
我们看到端口默认为8080 , 我们访问下控制器内定义的/user/all , /user/id均成功返回了JSON
本文相关示例完整代码详见:github.com/mingyunet/webfluxDemo


    推荐阅读