WebFlux04 SpringBootWebFlux集成MongoDB之Windows版本
阿新 • • 發佈:2018-06-29
ng- 類型 god 持久層 tor optional 安裝目錄 bat 控制臺
1 下載並安裝MongoDB
1.1 MongoDB官網
1.2 下載
solutions -> download center
1.3 安裝
雙擊進入安裝即可
1.3.1 安裝時常見bug01
1.3.2 bug01解決辦法
1.4 啟動mongodb
技巧01:需要在同安裝目錄同一級別創建一個data目錄來存放數據
技巧02:將下下面的命令存儲成一個 bat 文件,下次啟動時雙擊即可
C:\tool\mongoDB\bin\mongod --dbpath C:\tool\data --smallfiles
1.5 mongodb正常啟動後的控制臺信息
2 SpringBootWebFlux集成MongoDB
2.1 創建一個項目
引入相關依賴:webflux、mongodb、devtool、lombok
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.xiangxu</groupId> <artifactId>webflux_demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>webflux_demo</name> <description>Demo project forpom.xmlSpring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!--<scope>runtime</scope>--> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb-reactive --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
2.2 啟動類
在啟動類上添加 @EnableReactiveMongoRepositories 註解來開啟mongodb相關的配置
package cn.xiangxu.webflux_demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories; @SpringBootApplication @EnableReactiveMongoRepositories public class WebfluxDemoApplication { public static void main(String[] args) { SpringApplication.run(WebfluxDemoApplication.class, args); } }View Code
2.3 實體類
@Document(collection = "user") 目的時定義在mongodb中的表名,相當於JPA中的@Table註解
技巧01:在mongodb中的主鍵一般都是String類型的
package cn.xiangxu.webflux_demo.domain; import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; /** * @author 王楊帥 * @create 2018-06-27 8:42 * @desc **/ @Document(collection = "user") @Data public class User { @Id private String id; private String name; private int age; }User.java
2.4 持久層
只需要繼承 ReactiveMongoRepository 接口就行啦,和JPA差不多
package cn.xiangxu.webflux_demo.repository; import cn.xiangxu.webflux_demo.domain.User; import org.springframework.data.mongodb.repository.ReactiveMongoRepository; import org.springframework.stereotype.Repository; /** * @author 王楊帥 * @create 2018-06-27 8:44 * @desc **/ @Repository public interface UserRepository extends ReactiveMongoRepository<User, String> { }UserRepository.java
2.5 控制層
技巧01:有兩種返回方式,一種是把所有數據一次性返回,另一種是像流一樣的進行返回
package cn.xiangxu.webflux_demo.web; import cn.xiangxu.webflux_demo.domain.User; import cn.xiangxu.webflux_demo.repository.UserRepository; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; /** * @author 王楊帥 * @create 2018-06-27 8:45 * @desc **/ @RestController @RequestMapping(value = "/user") public class UserController { private final UserRepository userRepository; /** * 利用構造器註入持久層對象 * @param userRepository */ public UserController(UserRepository userRepository) { this.userRepository = userRepository; } /** * 一次性返回 * @return */ @GetMapping(value = "/") public Flux<User> getAll() { return userRepository.findAll(); } /** * 流式返回 * @return */ @GetMapping(value = "/stream/all", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<User> streamGetAll() { return userRepository.findAll(); } }UserController.java
2.6 配置文件
前提:安裝好mongodb並啟動
spring.data.mongodb.uri=mongodb://localhost:27017/webflux
2.7 啟動並測試
技巧01:利用postman進行測試
WebFlux04 SpringBootWebFlux集成MongoDB之Windows版本