Spring Data Moore有哪些新功能? - spring.io

19-10-12 banq
                   

全面的大量新功能,尤其是Reactive,Kotlin和Performance。包括整個產品組合中的大量改進和新功能,并且重點關注三個主要主題:Reactive,Kotlin和Performance。該版本增加了聲明式反應式事務和協程/流程支持等功能,并提供了高達60%*更快的查找器方法。

讓我們從Moore的一些Reactive功能開始。

聲明式Reactive事務

Lovelace發行版封閉式的方式引入了對響應式事務的早期支持,從而留出了一些改進的空間。以下清單顯示了該樣式:

Lovelace中的反應式事務(使用MongoDB)

public Mono<Process> doSomething(Long id) {

? return template.inTransaction().execute(txTemplate -> {

? ? return txTemplate.findById(id)
? ? ? .flatMap(it -> start(txTemplate, it))
? ? ? .flatMap(it -> verify(it))
? ? ? .flatMap(it -> finish(txTemplate, it));

? }).next();
}

在前面的代碼段中,必須通過inTransaction()在閉包內使用可識別事務的模板顯式調用來啟動事務,最后調用next()以將返回值Flux轉換為a?Mono來滿足方法簽名,即使findById(…)已經僅發出一個元素。

顯然,這不是進行反應式事務的最直觀的方法。因此,讓我們看看使用聲明式反應式事務支持的相同流程。與Spring的事務支持一樣,您需要一個組件來為您處理交易。對于反應式事務,

ReactiveTransactionManager是由MongoDB和R2DBC模塊提供。以下清單顯示了這樣的組件:
@EnableTransactionManagement
class Config extends AbstractReactiveMongoConfiguration {

? // …

? @Bean
? ReactiveTransactionManager mgr(ReactiveMongoDatabaseFactory f) {
? ? return new ReactiveMongoTransactionManager(f);
? }
}

在這里,您可以使用@Transactional基礎結構來注釋方法,并依靠該基礎結構來啟動,提交和回滾事務流,以通過Reactor Context處理生命周期。這可以讓你把代碼從Lovelace轉換成以下方法,刪除與它的作用域模板和多余的封閉的需要Flux來Mono改造:

Declarative Reactive Transactions in Moore (with MongoDB)

@Transactional
public Mono<Process> doSomething(Long id) {

? return template.findById(id)
? ? .flatMap(it -> start(template, it))
? ? .flatMap(it -> verify(it))
? ? .flatMap(it -> finish(template, it));
}

響應式Elasticsearch存儲庫

Spring Data Elasticsearch現在提供了反應性模板和存儲庫支持,該支持基于完全基于反應式Elasticsearch REST客戶端而又基于Spring的REST客戶端構建WebClient。

該客戶端通過在Java High-Level REST Client附近公開一個熟悉的API,為日常搜索操作提供一流的支持,并在需要時進行必要的削減。模板和存儲庫API的組合使您可以根據需要無縫過渡到響應式而不會迷失方向。以下清單顯示了如何配置Elasticsearch以使用反應式客戶端:

class Config extends AbstractReactiveElasticsearchConfiguration {

? // …

? @Bean
? public ReactiveElasticsearchClient reactiveClient() {
? ? return ReactiveRestClients.create(localhost());
? }
}

@Autowired
ReactiveElasticsearchTemplate template;

//…

Criteria criteria = new Criteria("topics").contains("spring")
? ? .and("date").greaterThanEqual(today())

Flux<Conference> result = template.find(new CriteriaQuery(criteria), Conference.class);

反應式查詢

Querydsl提供了一種出色的方式來定義多個數據存儲的類型安全查詢,并且已經有相當長的一段時間支持非反應性數據訪問。為了在響應式場景中提供支持,我們添加了響應式執行層,可讓您運行Predicate支持的查詢。的ReactiveQuerydslPredicateExecutor,當添加到存儲庫接口,提供了所有的入口點,如下面的示例所示:

interface SampleRepository extends …, ReactiveQuerydslPredicateExecutor<…> {
? // …
}

@Autowired
SampleRepository repository;

// …
Predicate predicate = QCustomer.customer.lastname.eq("Matthews");
Flux<Customer> result = repository.findAll(predicate);

支持Kotlin協程和MongoDB標準API DSL

點擊標題見原文

性能提升

基準測試顯示JPA單屬性查找器方法(例如findByTitle(…))的吞吐量提高了近60%

實體回調API

支持Redis流???????

JPA存儲過程的多個輸出參數???????

@NamedStoredProcedureQuery(name = "User.s1p", procedureName = "s1p",
? parameters = {
? ? @StoredProcedureParameter(mode = IN, name = "in_1", type = …),
? ? @StoredProcedureParameter(mode = OUT, name = "out_1", type = …),
? ? @StoredProcedureParameter(mode = OUT, name = "out_2", type = …)})
@Table(name = "SD_User")
class User { … }

interface UserRepository extends JpaRepository<…> {

? @Procedure(name = "User.s1p")
? Map<String, Integer> callS1P(@Param("in_1") Integer arg);
}

關于存儲庫方法的聲明性MongoDB聚合

使用MongoDB,復雜的數據處理是通過聚合來完成的,對于這些聚合,Spring Data提供了一個特定的(流利的)API,并對操作和表達式進行了抽象。但是,Stackoverflow告訴我們人們傾向于在命令行上進行聚合,然后將其轉換為Java代碼。該翻譯原來是一個主要的痛點。因此,我們借此機會介紹@Aggregation了一種在存儲庫方法中運行聚合的直接方法。以下示例顯示了如何執行此操作:

聲明式MongoDB聚合:

interface OrderRepository extends CrudRepository<Order, Long> {

? @Aggregation("{ $group : { _id : '$cust_id', total : { $sum : '$amount' }}}")
? List<TotalByCustomer> totalByCustomer(Sort sort);

? @Aggregation(pipeline = {
? ? "{ $match : { customerId : ?0 }}",
? ? "{ $count : total }"
? })
? Long totalOrdersForCustomer(String customerId);
}

@Aggregation像它的親戚@Query注釋一樣支持參數替換,并且如果由查詢方法參數提供,則對聚合添加排序,如前面的示例所示。

還有更多

  • Gemfire / Apache Geode:改進的SSL支持和動態端口配置
  • JDBC:只讀屬性,SQL生成和可嵌入的加載選項
  • REST:利用HATEOAS 1.0及其中所有有趣的東西!
  • MongoDB:響應式GridFS,聲明式排序規則支持和JSON模式生成器
  • neo4j:空間類型和存在預測
  • Apache Cassandra:范圍查詢,樂觀鎖定和審計支持
  • Redis:集群緩存和非阻塞連接方法
  • Elasticsearch:高級REST客戶端支持和非基于Jackson的實體映射

???????點擊標題見原文

                   

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片