【spring boot】2.0 集成 webflux 以及 异步响应式新特性验证
2018-03-12 15:36
876 查看
〇·webflux新特性 这里不作介绍了,主要是演示一下集成,和异步响应式的测试。
一·引入jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
* 说明:
*
* @author WangBin
* @version V1.0
* @since 2018.03.08
*/
public class City {
/**
* 城市编号
*/
private Long id;
/**
* 省份编号
*/
private Long provinceId;
/**
* 城市名称
*/
private String cityName;
/**
* 描述
*/
private String description;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getProvinceId() {
return provinceId;
}
public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "City{" +
"id=" + id +
", provinceId=" + provinceId +
", cityName='" + cityName + '\'' +
", description='" + description + '\'' +
'}';
}
}
执行 findAllCity 输出打印 可以看到 打印结果为
findAllCity1
findAllCity3
findAllCity2
Flux 所执行的方法 会 异步执行 ,执行完 1后 执行 3 最后等到 2 执行完毕后 return 结果。
一·引入jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>二·代码编写/**
* 说明:
*
* @author WangBin
* @version V1.0
* @since 2018.03.08
*/
public class City {
/**
* 城市编号
*/
private Long id;
/**
* 省份编号
*/
private Long provinceId;
/**
* 城市名称
*/
private String cityName;
/**
* 描述
*/
private String description;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getProvinceId() {
return provinceId;
}
public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "City{" +
"id=" + id +
", provinceId=" + provinceId +
", cityName='" + cityName + '\'' +
", description='" + description + '\'' +
'}';
}
}
/** * 说明: * * @author WangBin * @version V1.0 * @since 2018.03.08 */ public interface CityService { /** * 获取城市信息列表 * * @return */ List<City> findAllCity(); /** * 根据城市 ID,查询城市信息 * * @param id * @return */ City findCityById(Long id); /** * 新增城市信息 * * @param city * @return */ Long saveCity(City city); /** * 更新城市信息 * * @param city * @return */ Long updateCity(City city); /** * 根据城市 ID,删除城市信息 * * @param id * @return */ Long deleteCity(Long id); }
/** * 说明: * * @author WangBin * @version V1.0 * @since 2018.03.08 */ @Service public class CityServiceImpl implements CityService { // 模拟数据库,存储 City 信息 private static Map<Long, City> CITY_DB = new HashMap<>(); @Override public List<City> findAllCity() { return new ArrayList<>(CITY_DB.values()); } @Override public City findCityById(Long id) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println("findOneCity 2"); return CITY_DB.get(id); } @Override public Long saveCity(City city) { city.setId(CITY_DB.size() + 1L); CITY_DB.put(city.getId(), city); return city.getId(); } @Override public Long updateCity(City city) { CITY_DB.put(city.getId(), city); return city.getId(); } @Override public Long deleteCity(Long id) { CITY_DB.remove(id); return id; } }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; /** * 说明: * * @author WangBin * @version V1.0 * @since 2018.03.08 */ @RestController @RequestMapping(value = "/city") public class CityRestController { @Autowired private CityService cityService; @RequestMapping(value = "/{id}", method = RequestMethod.GET) public Mono<City> findOneCity(@PathVariable("id") Long id) { System.err.println("findOneCity 1"); Mono mono = Mono.create(cityMonoSink -> cityMonoSink.success(cityService.findCityById(id))); System.err.println("findOneCity 3"); return mono; } /** * Flux<Object> 支持REST风格的 JSON 和 XML 序列化和反序列化 * 处理函数,它将数据库中发现的所有 City 对象返回为JSON。 * @return */ @RequestMapping(method = RequestMethod.GET) public Flux<City> findAllCity() { System.err.println("findAllCity 1"); Flux flux = Flux.create(cityFluxSink -> { cityService.findAllCity().forEach(city -> cityFluxSink.next(city)); cityFluxSink.complete(); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println("findAllCity 2"); }); System.err.println("findAllCity end 3"); return flux; } @RequestMapping(method = RequestMethod.POST) public Mono<Long> createCity(@RequestBody City city) { return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.saveCity(city))); } @RequestMapping(method = RequestMethod.PUT) public Mono<Long> modifyCity(@RequestBody City city) { return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.updateCity(city))); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) public Mono<Long> modifyCity(@PathVariable("id") Long id) { return Mono.create(cityMonoSink -> cityMonoSink.success(cityService.deleteCity(id))); } }三·特性测试
执行 findAllCity 输出打印 可以看到 打印结果为
findAllCity1
findAllCity3
findAllCity2
Flux 所执行的方法 会 异步执行 ,执行完 1后 执行 3 最后等到 2 执行完毕后 return 结果。
相关文章推荐
- Spring Boot 2.0 - WebFlux With MongoDB
- Spring Boot 2.0 - WebFlux framework
- springboot 2.0中webflux使用netty作为http服务器的坑
- 使用 Spring Boot 2.0 + WebFlux 实现 RESTful API功能
- 聊聊 Spring Boot 2.0 的 WebFlux
- Spring Boot 2.0 WebFlux 上手系列课程:快速入门(一)
- Spring学习(一)tomcat加载web.xml、以及项目集成Spring支持
- Spring Boot Restful WebAPI集成 OAuth2
- Proxool在web项目中的配置,以及与spring3、hibernate4的集成
- Spring Boot 2.0新增的Actuator端点的特性
- spring boot 2.0,netty,mybatis,mysql,redis,docker 集成
- Spring Boot 实践1 --创建WEB restful项目,集成jpa
- (6)Spring WebFlux性能测试——响应式Spring的道法术器
- Spring Boot 2.0新增的Actuator端点的特性
- spring-boot | 集成短信验证码服务
- [置顶] MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- spring boot最新教程(四):返回json数据以及集成fastjson的使用
- Spring Boot 2.0新增的Actuator端点的特性
- Spring Boot 集成 Mybatis(druid 数据库连接池 以及 分页配置)
- Spring Boot 与 Kotlin 验证web表单信息