Pivotal发布包含反应式数据访问特性的新一代Spring Data的第一个里程碑版本

Pivotal 发布了 Spring Data 的下一个版本 Release Train Kay 的首个里程碑版本,该版本全面支持 Java 8 和 Spring 5,并引入了对 MongoDB、Cassandra 和 Redis 数据库的反应式支持。

Pivotal最近发布了下一代Spring Data项目的第一个里程碑版本,他们将其称之为Release Train Kay。在发布文档中,这样写到:

\\
\

这是一个特殊的释放版本,会带领我们驶往新一代的Spring Data,在前行的过程中也会包含几项破坏性的变更。

\
\\

重要的变更包括:

\\
  • 基础设施升级,完全支持:\\t
    • Java 8\\t\t
    • Spring 5\\t
    \\t
  • 对如下数据库提供了反应式(Reactive)支持:\\t \\t
  • 废弃了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\u0026lt;Person,String\u0026gt; {\    Flux\u0026lt;Person\u0026gt; findByLastname(String lastname);\\    @Query(\"{ 'firstname': ?0, 'lastname': ?1}\")\    Mono\u0026lt;Person\u0026gt; findByFirstnameAndLastname(String firstname,String lastname);\\    Flux\u0026lt;Person\u0026gt; findByLastname(Mono\u0026lt;String\u0026gt; lastname);\    }
\\

这里使用了反应式的类,也就是Flux\u0026lt;T\u0026gt;Mono\u0026lt;T\u0026gt;,它们可以作为返回类型和参数。

\\

正如最近InfoQ上的一篇文章所述

\\
\

Flux类似RxJava的Observable,它可以触发零或多个事件,并根据实际情况结束处理或触发错误。

\\

而Mono最多只触发一个事件,它对应于RxJava的SingleMaybe,所以可以将Mono\u0026lt;Void\u0026gt;用于在异步任务完成时发出通知。

\
\\

类似的,使用RxJava的基础反应式repository接口可以写成如下所示的样子:

\\
\    public interface RxJava1PersonRepository extends RxJava1CrudRepository\u0026lt;Person,String\u0026gt; {\    Observable\u0026lt;Person\u0026gt; findByLastname(String lastname);\\    @Query(\"{ 'firstname': ?0, 'lastname': ?1}\")\    Single\u0026lt;Person\u0026gt; findByFirstnameAndLastname(String firstname,String lastname);\\    Observable\u0026lt;Person\u0026gt; findByLastname(Single\u0026lt;String\u0026gt; lastname);\    }
\\

激活Spring Data反应式repository是通过注解完成的,也就是@EnableReactiveMongoRepositories@EnableCassandraRepositories,下面展示了MongoDB的样例:

\\
\@EnableReactiveMongoRepositories\@AutoConfigreAfter(EmbeddedMongoAutoConfiguration.class)\class ApplicationConfiguration extended AbstractReactiveMongoConfiguration {\\    @Bean\    public LoggingEventListener mongoEventListener() {\        return new LoggingEventListener();\        }\\    @Override\    @Bean\    public MongoClient mongoClient() {\        return MongoClients.create();\        }\\    @Override\    protected String getDatabaseName() {\        return \"reactive\";\        }\    }
\\

类似于构建传统数据操作的模板,反应式模板也可以写成如下所示:

\\
\  public interface ReactiveMongoOperations {\    // 其他操作……\    \u0026lt;T\u0026gt; Mono\u0026lt;T\u0026gt; findOne(Query query,Class\u0026lt;T\u0026gt; entityClass);\    \u0026lt;T\u0026gt; Flux\u0026lt;T\u0026gt; find(Query query,Class\u0026lt;T\u0026gt; entityClass);\    \u0026lt;T\u0026gt; Mono\u0026lt;T\u0026gt; insert(T objectToSave,String collectionName);\    \u0026lt;T\u0026gt; Mono\u0026lt;T\u0026gt; insert(Mono\u0026lt;? extends T\u0026gt; objectToSave);\    }
\\

数据同样可以通过模板进行插入:

\\
\ Flux\u0026lt;Person\u0026gt; flux = Flux.just(new Person(\"Vincent\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值