Welcome 微信登录

首页 / 操作系统 / Linux / Pivotal发布包含反应式数据访问特性的新一代Spring Data的第一个里程碑版本

Pivotal最近发布了下一代Spring Data项目的第一个里程碑版本,他们将其称之为Release Train Kay。在发布文档中,这样写到:
这是一个特殊的释放版本,会带领我们驶往新一代的Spring Data,在前行的过程中也会包含几项破坏性的变更。
重要的变更包括:
  • 基础设施升级,完全支持:
    • Java 8
    • Spring 5
  • 对如下数据库提供了反应式(Reactive)支持:
    • MongoDB
    • Apache Cassandra
    • Redis
  • 废弃了JRedis和SRP驱动
选择MongoDB、Cassandra和Redis的原因在于它们具有实现反应式数据访问的可用驱动。针对这三种数据库,都包含了面向Reactor项目和RxJava的Spring Data repository接口。为了准备Spring Data反应式访问MongoDB的样例,我们考虑如下的POJO:public class Person {private @Id String id;private final String firstname;private final String lastname;}使用Reactor项目的基本反应式repository接口可以写成如下所示的样子:public interface ReactivePersonRepository extends ReactiveCrudRepository<Person,String> {Flux<Person> findByLastname(String lastname);@Query("{ "firstname": ?0, "lastname": ?1}")Mono<Person> findByFirstnameAndLastname(String firstname,String lastname);Flux<Person> findByLastname(Mono<String> lastname);}这里使用了反应式的类,也就是Flux<T>Mono<T>,它们可以作为返回类型和参数。正如最近InfoQ上的一篇文章所述:
Flux类似RxJava的Observable,它可以触发零或多个事件,并根据实际情况结束处理或触发错误。而Mono最多只触发一个事件,它对应于RxJava的SingleMaybe,所以可以将Mono<Void>用于在异步任务完成时发出通知。
类似的,使用RxJava的基础反应式repository接口可以写成如下所示的样子:public interface RxJava1PersonRepository extends RxJava1CrudRepository<Person,String> {Observable<Person> findByLastname(String lastname);@Query("{ "firstname": ?0, "lastname": ?1}")Single<Person> findByFirstnameAndLastname(String firstname,String lastname);Observable<Person> findByLastname(Single<String> lastname);}激活Spring Data反应式repository是通过注解完成的,也就是@EnableReactiveMongoRepositories@EnableCassandraRepositories,下面展示了MongoDB的样例:@EnableReactiveMongoRepositories@AutoConfigreAfter(EmbeddedMongoAutoConfiguration.class)class ApplicationConfiguration extended AbstractReactiveMongoConfiguration {@Beanpublic LoggingEventListener mongoEventListener() {return new LoggingEventListener();}@Override@Beanpublic MongoClient mongoClient() {return MongoClients.create();}@Overrideprotected String getDatabaseName() {return "reactive";}}类似于构建传统数据操作的模板,反应式模板也可以写成如下所示:public interface ReactiveMongoOperations {// 其他操作……<T> Mono<T> findOne(Query query,Class<T> entityClass);<T> Flux<T> find(Query query,Class<T> entityClass);<T> Mono<T> insert(T objectToSave,String collectionName);<T> Mono<T> insert(Mono<? extends T> objectToSave);}数据同样可以通过模板进行插入: Flux<Person> flux = Flux.just(new Person("Vincent","Vega"),new Person("Jules","Winnfield"),new Person("Marsellus","Wallace"),new Person("Mia","Wallace"));template.insertAll(flux).subscribe();完整的Spring Data反应式MongoDB项目可以在GitHub上找到。
相关资源
关于反应式编程的更多详细信息可以通过如下的文章来获取:
  • Victor Grazi所撰写的RxJava样例文章;
  • Simon Baslé撰写的Reactor样例文章;
  • Pivotal借助Spring Data实现反应式编程的博客文章;
  • GitHub上所有Spring Data的样例
查看英文原文:Pivotal Releases First Milestone of Next-Generation Spring Data Featuring Reactive Database AccessSpring Data JPA调用存储过程实例 http://www.linuxidc.com/Linux/2016-01/127007.htmSpring Data 的详细介绍:请点这里
Spring Data 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139939.htm