博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pivotal发布包含反应式数据访问特性的新一代Spring Data的第一个里程碑版本
阅读量:6762 次
发布时间:2019-06-26

本文共 2850 字,大约阅读时间需要 9 分钟。

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

\\
\

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

\
\\

重要的变更包括:

\\
  • 基础设施升级,完全支持:\\t
    • Java 8\\t\t
    • Spring 5\\t
    \\t
  • 对如下数据库提供了反应式(Reactive)支持:\\t
    • \\t\t
    • \\t\t
    • \\t
    \\t
  • 废弃了和SRP驱动\

选择MongoDB、Cassandra和Redis的原因在于它们具有实现反应式数据访问的可用驱动。针对这三种数据库,都包含了面向和的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);\    }
\\

这里使用了反应式的类,也就是和

\\

正如最近InfoQ上的:

\\
\

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

\\

而Mono最多只触发一个事件,它对应于RxJava的和,所以可以将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\

转载地址:http://jebeo.baihongyu.com/

你可能感兴趣的文章
《JAVA与模式》之单例模式(转载)
查看>>
ajax中的异步机制导致的问题
查看>>
java质数判断
查看>>
Android JNI和NDK学习(03)--动态方式实现JNI(转)
查看>>
如何提升你的面试机会?
查看>>
如何在Kubernetes部署期间正确处理DB模式
查看>>
甲骨文11.9亿美元收云解决方案供应商Aconex,预计明年上半年完成
查看>>
利用 Universal Transformer,翻译将无往不利!
查看>>
Python 做图片清晰度识别
查看>>
硬核NeruIPS 2018最佳论文,一个神经了的常微分方程
查看>>
个推Node.js 微服务实践:基于容器的一站式命令行工具链
查看>>
Express源码学习-路由篇
查看>>
Android平台上图片/视频选择,编辑和压缩的一站式解决方案
查看>>
从零开始撸一个Fresco之总结
查看>>
我想把 FileProvider 聊的更透彻一些
查看>>
2018年8月Top 10 JavaScript开源项目
查看>>
手游开发如何选择后端服务
查看>>
开学季你最想要的这10本编程新书
查看>>
node中的http会了吗? 来手写一个属于自己的'cgp-server'静态服务
查看>>
守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
查看>>