编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Spring Data 简介和踩坑心得(spring.datasource)

wxchong 2024-08-23 00:02:33 开源技术 19 ℃ 0 评论

简介

Spring Data 是spring的一个子项目,包含了一揽子具体数据库的子模块。本意是最具体的数据库进行封装,抽象一层更简单好用的模板,省去开发者配置、调试的时间,而把时间真正用在业务逻辑开发上。


特色:

  • 强大的数据存储层和优秀的对象映射(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 这套组合实际上成熟度只能说一般般,但是使用起来确实方便。

配置几个注解。声明启用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 客户端。但是这件事并不绝对,封装客户端使之更好用可能会花费一定的时间。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表