Spring Data 簡介和踩坑心得

簡介

Spring Data 是spring的一個子項目,包含了一攬子具體數據庫的子模塊。本意是最具體的數據庫進行封裝,抽象一層更簡單好用的模板,省去開發者配置、調試的時間,而把時間真正用在業務邏輯開發上。


Spring Data 簡介和踩坑心得

Spring Data 官網

特色:

  • 強大的數據存儲層和優秀的對象映射(ORM)
  • 實現領域對象(Domain Object)且帶有基礎屬性
  • 支持透明的審計(創建時間、更新時間)
  • 可以跟Spring輕鬆的整合,基於註解或者XML
  • 與SpringMVC的控制器整合有高級特性
  • 跨數據源持久化(實驗特性)

小編注:

可以看出,大部分的特性並不是特別吸引我們。

引入spring data,特別是在spring boot之後,最大的好處就是簡化了配置。

換句話說,幾個註解,幾行yml配置,一套數據源就整合進來了。省去了查詢官方手冊的時間。

支持範圍

  • JDBC : 就是我們學習java最開始用的,也是大部分orm框架的底層
  • JPA : 國外更喜歡使用的ORM框架,國內使用Mybatis的更多。
  • LDAP : 即LDAP,不解釋
  • REDIS : 數據結構或者叫KV存儲,普遍被使用
  • MONGODB : 文檔數據庫王者
  • CASANDDRA / GEMFIRE / SOLR : 列式數據庫、spring母公司pivotal的增強版redis 、lucene上層的搜索服務器
  • 其他:支持Elasticsearch 、Neo4j 等存儲,且有大量開源擴展

可以看出,國外的開發者其實與國內的喜好不完全一致。

orm我們喜歡mybatis,而國外使用jpa和hibernate的明顯更多,mybatis份額很小。(參見stackoverflow調查)

列式數據庫,我們hbase 相較 cassandra 用的更多。

一些雲廠商、小廠商的數據庫,我們幾乎不會使用。


Spring Data 簡介和踩坑心得

官方支持

使用套路

spring data 這套組合實際上成熟度只能說一般般,但是使用起來確實方便。

配置幾個註解。聲明啟用xxx 數據源;

配置幾行yml。配置具體使用的連接參數;

spring data 會提供一個 xxxSessionFactory / xxxTemplate ,裡面已經封裝好了你想要的常見CRUD方法,業務上直接 @Autowired 引入即可。

但是。。。

一般的中小型項目,在時間緊迫、沒有複雜需求的情況下,使用Spring data 沒有任何問題。但是spring data 也不是完美的,主要有以下幾個問題:

  1. spring 對數據庫進行的2次封裝,細節未必符合預期

拿elasticseach為例,官方加起來有多種java客戶端,區分 high-level client 和 low-level client ,spring 選擇的不一定是你想要的。統一管理的方法,為了抽象的需要,性能上不一定說的過去。

  1. spring 封裝的方法未必夠用

拿redis為例,如果需要一些 lua腳本操作、pipeline操作、循環 scan操作, spring 封裝的template常常是不夠用的,對象序列化的方式也不一定習慣。 到頭來還得自己使用官方 jedis 客戶端實現

  1. 版本衝突

spring 、 springboot 、springdata 、數據庫的客戶端 4者其實是有一定關係的。

低版本的springboot 可能不支持高版本的springdata , 當你的數據庫(如 hbase)需要高版本客戶端時,引入springdata 可能會導致被迫的springboot版本升級;

另外springdata 的版本必然是落後官方客戶端的。

也是因此,一般有一定規模的企業,都會有自己封裝的客戶端,且在數據庫版本上限定。減少開發和運維的適配工作。

小編本人所處的項目嚐嚐有用到一些高級功能或者定製功能(因為高併發對性能比較看重)。

因此都是使用官方的 redis、kafka、mongodb、hbase、es 客戶端。但是這件事並不絕對,封裝客戶端使之更好用可能會花費一定的時間。


分享到:


相關文章: