From 6927d5db55141c8274e563b60421643df70b9c4b Mon Sep 17 00:00:00 2001 From: liqiangqiang Date: Fri, 13 Apr 2018 17:48:36 +0800 Subject: [PATCH] =?UTF-8?q?WebFlux=20=E5=BF=AB=E9=80=9F=E5=85=A5=E9=97=A8?= =?UTF-8?q?=E5=AE=9E=E8=B7=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- springboot-webflux-3-mongodb/pom.xml | 47 ++++++++++++++ .../org/spring/springboot/Application.java | 20 ++++++ .../spring/springboot/dao/CityRepository.java | 10 +++ .../org/spring/springboot/domain/City.java | 63 +++++++++++++++++++ .../springboot/handler/CityHandler.java | 43 +++++++++++++ .../controller/CityWebFluxController.java | 41 ++++++++++++ .../src/main/resources/application.properties | 5 ++ 7 files changed, 229 insertions(+) create mode 100755 springboot-webflux-3-mongodb/pom.xml create mode 100644 springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/Application.java create mode 100644 springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java create mode 100644 springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/domain/City.java create mode 100644 springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java create mode 100644 springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java create mode 100644 springboot-webflux-3-mongodb/src/main/resources/application.properties diff --git a/springboot-webflux-3-mongodb/pom.xml b/springboot-webflux-3-mongodb/pom.xml new file mode 100755 index 0000000..d5004d8 --- /dev/null +++ b/springboot-webflux-3-mongodb/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + springboot + springboot-webflux-3-mongodb + 0.0.1-SNAPSHOT + springboot-webflux-3-mongodb :: Spring Boot WebFlux 整合 MongoDB + + + + org.springframework.boot + spring-boot-starter-parent + 2.0.1.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + junit + junit + 4.12 + + + + diff --git a/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/Application.java b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/Application.java new file mode 100644 index 0000000..d648b6b --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/Application.java @@ -0,0 +1,20 @@ +package org.spring.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Spring Boot 应用启动类 + * + * Created by bysocket on 09/29/2017. + */ +// Spring Boot 应用的标识 +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + // 程序启动入口 + // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件 + SpringApplication.run(Application.class,args); + } +} diff --git a/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java new file mode 100644 index 0000000..83e4586 --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/dao/CityRepository.java @@ -0,0 +1,10 @@ +package org.spring.springboot.dao; + +import org.spring.springboot.domain.City; +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CityRepository extends ReactiveMongoRepository { + +} diff --git a/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/domain/City.java b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/domain/City.java new file mode 100644 index 0000000..2e9983c --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/domain/City.java @@ -0,0 +1,63 @@ +package org.spring.springboot.domain; + +import org.springframework.data.annotation.Id; + +/** + * 城市实体类 + * + */ +public class City { + + /** + * 城市编号 + */ + @Id + 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; + } +} diff --git a/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java new file mode 100644 index 0000000..096ceb8 --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/handler/CityHandler.java @@ -0,0 +1,43 @@ +package org.spring.springboot.handler; + +import org.spring.springboot.dao.CityRepository; +import org.spring.springboot.domain.City; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@Component +public class CityHandler { + + private final CityRepository cityRepository; + + @Autowired + public CityHandler(CityRepository cityRepository) { + this.cityRepository = cityRepository; + } + + public Mono save(City city) { + return cityRepository.save(city); + } + + public Mono findCityById(Long id) { + + return cityRepository.findById(id); + } + + public Flux findAllCity() { + + return cityRepository.findAll(); + } + + public Mono modifyCity(City city) { + + return cityRepository.save(city); + } + + public Mono deleteCity(Long id) { + cityRepository.deleteById(id); + return Mono.create(cityMonoSink -> cityMonoSink.success(id)); + } +} diff --git a/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java new file mode 100644 index 0000000..3954e07 --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/java/org/spring/springboot/webflux/controller/CityWebFluxController.java @@ -0,0 +1,41 @@ +package org.spring.springboot.webflux.controller; + +import org.spring.springboot.domain.City; +import org.spring.springboot.handler.CityHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@RequestMapping(value = "/city") +public class CityWebFluxController { + + @Autowired + private CityHandler cityHandler; + + @GetMapping(value = "/{id}") + public Mono findCityById(@PathVariable("id") Long id) { + return cityHandler.findCityById(id); + } + + @GetMapping() + public Flux findAllCity() { + return cityHandler.findAllCity(); + } + + @PostMapping() + public Mono saveCity(@RequestBody City city) { + return cityHandler.save(city); + } + + @PutMapping() + public Mono modifyCity(@RequestBody City city) { + return cityHandler.modifyCity(city); + } + + @DeleteMapping(value = "/{id}") + public Mono deleteCity(@PathVariable("id") Long id) { + return cityHandler.deleteCity(id); + } +} diff --git a/springboot-webflux-3-mongodb/src/main/resources/application.properties b/springboot-webflux-3-mongodb/src/main/resources/application.properties new file mode 100644 index 0000000..270284a --- /dev/null +++ b/springboot-webflux-3-mongodb/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.data.mongodb.host=localhost +spring.data.mongodb.database=admin +spring.data.mongodb.port=27017 +spring.data.mongodb.username=admin +spring.data.mongodb.password=admin