簡體   English   中英

如何使用Spring Boot並行執行SQL查詢?

[英]How to execute SQL query in parallel using spring boot?

我在頁面中有多個圖表,這些圖表將使用數據庫中的值進行更新。 初始化圖表時,我正在進行ajax調用,現在請求來自控制器類。 從控制器類,我正在使用存儲庫類對象多次調用數據庫。 如何通過多個查詢向數據庫發出單個請求並獲取響應數組。

例如,在這里,我進行了3次不同的調用,以為圖表獲得3種不同的值:

控制器類和存儲庫類

如何將這些請求合並為一個請求。

JDBC中有一個批處理概念,我們可以使用addBatch和excuteBatch來完成我想要的操作,但是我無法理解是否可以使用Spring Batch實現相同的目的。

Statement.addBatch不應該用於SELECT而是用於批處理INSERTUPDATE

您需要使用UNION進行一些自定義查詢,以在一個sql中獲取所需的所有數據。

      SELECT COUNT(n.lastUpdatedOn)
      FROM TableEntity n 
      WHERE n.lastUpdatedOn BETWEEN :start1 AND :end1 
      UNION 
      SELECT COUNT(n.lastUpdatedOn)
      FROM TableEntity n 
      WHERE n.lastUpdatedOn BETWEEN :start2 AND :end2 
      UNION 
      SELECT COUNT(n.lastUpdatedOn)
      FROM TableEntity n 
      WHERE n.lastUpdatedOn BETWEEN :start3 AND :end3

還有您的存儲庫代碼。

@Query("SELECT COUNT(n.lastUpdatedOn) FROM TableEntity n WHERE n.lastUpdatedOn BETWEEN :start1 AND :end1 UNION SELECT COUNT(n.lastUpdatedOn) FROM TableEntity n WHERE n.lastUpdatedOn BETWEEN :start2 AND :end2 UNION SELECT COUNT(n.lastUpdatedOn) FROM TableEntity n WHERE n.lastUpdatedOn BETWEEN :start3 AND :end3")
List<Long> countModifiedTimeStamp(@Param("start1") Timestamp start1, @Param("end1") Timestamp end1, @Param("start2") Timestamp start2, @Param("end2") Timestamp end2, @Param("start3") Timestamp start3, @Param("end3") Timestamp end3);

當你打電話時

List<Long> counts = this.repo.countModifiedTimeStamp(todayStartDay, today, last7days, today, longBack, last7days);

在返回的列表中, today將在第一個元素中顯示today ,第二個元素是longBack ,第三個元素是last7days

聽起來您想將這些實現為異步查詢。 我相信,這在Spring Data JPA文檔中有所介紹。 您可以在當前版本中使用以下任何一種方法格式:

@Async
Future<User> findByFirstname(String firstname);               

@Async
CompletableFuture<User> findOneByFirstname(String firstname); 

@Async
ListenableFuture<User> findOneByLastname(String lastname);

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-async

(您也可以為每個Thread分拆單獨的Thread實例,但我不建議這樣做)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM