全面的大量新功能,尤其是Reactive,Kotlin和Performance。包括整个产品组合中的大量改进和新功能,并且重点关注三个主要主题:Reactive,Kotlin和Performance。该版本增加了声明式反应式事务和协程/流程支持等功能,并提供了高达60%*更快的查找器方法。
让我们从Moore的一些Reactive功能开始。
声明式Reactive事务
Lovelace发行版以封闭式的方式引入了对响应式事务的早期支持,从而留出了一些改进的空间。以下清单显示了该样式:
Lovelace中的反应式事务(使用MongoDB)
public Mono<Process> doSomething(Long id) { |
在前面的代码段中,必须通过inTransaction()在闭包内使用可识别事务的模板显式调用来启动事务,最后调用next()以将返回值Flux转换为a Mono来满足方法签名,即使findById(…)已经仅发出一个元素。
显然,这不是进行反应式事务的最直观的方法。因此,让我们看看使用声明式反应式事务支持的相同流程。与Spring的事务支持一样,您需要一个组件来为您处理交易。对于反应式事务,
ReactiveTransactionManager是由MongoDB和R2DBC模块提供。以下清单显示了这样的组件: |
在这里,您可以使用@Transactional基础结构来注释方法,并依靠该基础结构来启动,提交和回滚事务流,以通过Reactor Context处理生命周期。这可以让你把代码从Lovelace转换成以下方法,删除与它的作用域模板和多余的封闭的需要Flux来Mono改造:
Declarative Reactive Transactions in Moore (with MongoDB)
@Transactional |
响应式Elasticsearch存储库
Spring Data Elasticsearch现在提供了反应性模板和存储库支持,该支持基于完全基于反应式Elasticsearch REST客户端而又基于Spring的REST客户端构建WebClient。
该客户端通过在Java High-Level REST Client附近公开一个熟悉的API,为日常搜索操作提供一流的支持,并在需要时进行必要的削减。模板和存储库API的组合使您可以根据需要无缝过渡到响应式而不会迷失方向。以下清单显示了如何配置Elasticsearch以使用反应式客户端:
class Config extends AbstractReactiveElasticsearchConfiguration { |
反应式查询
Querydsl提供了一种出色的方式来定义多个数据存储的类型安全查询,并且已经有相当长的一段时间支持非反应性数据访问。为了在响应式场景中提供支持,我们添加了响应式执行层,可让您运行Predicate支持的查询。的ReactiveQuerydslPredicateExecutor,当添加到存储库接口,提供了所有的入口点,如下面的示例所示:
interface SampleRepository extends …, ReactiveQuerydslPredicateExecutor<…> { |
支持Kotlin协程和MongoDB标准API DSL
点击标题见原文
性能提升
基准测试显示JPA单属性查找器方法(例如findByTitle(…))的吞吐量提高了近60%
实体回调API
支持Redis流
JPA存储过程的多个输出参数
@NamedStoredProcedureQuery(name = "User.s1p", procedureName = "s1p", |
关于存储库方法的声明性MongoDB聚合
使用MongoDB,复杂的数据处理是通过聚合来完成的,对于这些聚合,Spring Data提供了一个特定的(流利的)API,并对操作和表达式进行了抽象。但是,Stackoverflow告诉我们人们倾向于在命令行上进行聚合,然后将其转换为Java代码。该翻译原来是一个主要的痛点。因此,我们借此机会介绍@Aggregation了一种在存储库方法中运行聚合的直接方法。以下示例显示了如何执行此操作:
声明式MongoDB聚合:
interface OrderRepository extends CrudRepository<Order, Long> { |
@Aggregation像它的亲戚@Query注释一样支持参数替换,并且如果由查询方法参数提供,则对聚合添加排序,如前面的示例所示。
还有更多
- Gemfire / Apache Geode:改进的SSL支持和动态端口配置
- JDBC:只读属性,SQL生成和可嵌入的加载选项
- REST:利用HATEOAS 1.0及其中所有有趣的东西!
- MongoDB:响应式GridFS,声明式排序规则支持和JSON模式生成器
- neo4j:空间类型和存在预测
- Apache Cassandra:范围查询,乐观锁定和审计支持
- Redis:集群缓存和非阻塞连接方法
- Elasticsearch:高级REST客户端支持和非基于Jackson的实体映射
点击标题见原文