内容简介:Spring Boot现在采用了反应式编程(响应式Reactive),它是一种非阻塞的异步应用程序和事件驱动编程。Spring Framework在内部使用Reactor支持这种Reactive支持,Reactor是一个Reactive Streams实现,它进一步扩展了Publisher模型Flux和Mono。让我们开始创建一个新的Spring Boot项目,将Webflux,Mongo Reactive和Lombok作为依赖项。spring init --dependencies=webflux,da
Spring Boot现在采用了反应式编程(响应式Reactive),它是一种非阻塞的异步应用程序和事件驱动编程。Spring Framework在内部使用Reactor支持这种Reactive支持,Reactor是一个Reactive Streams实现,它进一步扩展了Publisher模型Flux和Mono。
让我们开始创建一个新的Spring Boot项目,将Webflux,Mongo Reactive和Lombok作为依赖项。
spring init --dependencies=webflux,data-mongodb-reactive,lombok --build=gradle --language=java reactive-webflux-workshop
现在让我们创建一个简单的POJO来存储和检索 MongoDB 中的信息:
@Data @Document @AllArgsConstructor <b>public</b> <b>class</b> Person { @Id <b>private</b> String uuid; <b>private</b> String nickname; <b>private</b> String email; }
Lombok的@Data注释生成getter和setter方法,toString(),equals(),hashcode()并为每个对象创建一个构造函数。
Spring Data现在支持MongoDB,Couchbase,Redis和Casandra的全面反应体验,在这种情况下,让我们创建一个PersonRepository实现ReactiveMongoRepository:
<b>import</b> org.springframework.data.mongodb.repository.ReactiveMongoRepository; <b>import</b> reactor.core.publisher.Flux; <b>import</b> com.jos.dem.webflux.model.Person; <b>public</b> <b>interface</b> PersonRepository <b>extends</b> ReactiveMongoRepository<Person, String> {}
我们将CommandLineRunner用于启动我们的工作流程。这CommandLineRunner是Spring Boot中的回调接口,当Spring Boot启动时会传入args调用其run()方法 :
@SpringBootApplication <b>public</b> <b>class</b> PersonApplication { <b>public</b> <b>static</b> <b>void</b> main(String[] args) { SpringApplication.run(PersonApplication.<b>class</b>, args); } @Bean CommandLineRunner start(){ <b>return</b> args -> { System.out.println(<font>"Hello World!"</font><font>); }; } } </font>
进一步定制start方法:创建人员列表并将其存储在MongoDB中:
@Bean CommandLineRunner start(PersonRepository personRepository){ <b>return</b> args -> { Stream.of(<font>"josdem"</font><font>, </font><font>"tgrip"</font><font>, </font><font>"edzero"</font><font>, </font><font>"skuarch"</font><font>, </font><font>"siedrix"</font><font>) .map(nickname -> <b>new</b> Person(UUID.randomUUID().toString(), nickname, nickname + </font><font>"@email.com"</font><font>)) .forEach(person -> personRepository.save(person).subscribe()); }; } </font>
重要信息:在上面函数运算符中实现的逻辑仅在数据开始流动时执行,也就是直到使用subscribe()方法才会执行。
现在我们将Person对象存储到MongoDB,让我们添加一些代码来清理我们的数据库,插入和显示人员。
@Bean CommandLineRunner start(PersonRepository personRepository){ <b>return</b> args -> { personRepository.deleteAll().subscribe(); Stream.of(<font>"josdem"</font><font>, </font><font>"tgrip"</font><font>, </font><font>"edzero"</font><font>, </font><font>"skuarch"</font><font>, </font><font>"siedrix"</font><font>) .map(nickname -> <b>new</b> Person(UUID.randomUUID().toString(), nickname, nickname + </font><font>"@email.com"</font><font>)) .forEach(person -> personRepository.save(person).subscribe()); personRepository.findAll().log().subscribe(System.out::println); }; } </font>
为了运行这个例子,你需要在MongoDB中创建一个数据库authorization: "enabled"。另外,不要忘记将MongoDB凭据信息添加到您的application.properties文件中:
spring.data.mongodb.database=reactive_webflux
spring.data.mongodb.host=localhost
spring.data.mongodb.username=username
spring.data.mongodb.password=password
要浏览项目,请转到 此处 下载项目。
以上所述就是小编给大家介绍的《Spring Webflux入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- TiDB入门(四):从入门到“跑路”
- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Docker入门(一)用hello world入门docker
- 赵童鞋带你入门PHP(六) ThinkPHP框架入门
- 初学者入门 Golang 的学习型项目,go入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learn Python 3 the Hard Way
Zed A. Shaw / Addison / 2017-7-7 / USD 30.74
You Will Learn Python 3! Zed Shaw has perfected the world’s best system for learning Python 3. Follow it and you will succeed—just like the millions of beginners Zed has taught to date! You bring t......一起来看看 《Learn Python 3 the Hard Way》 这本书的介绍吧!