Spring Data JPA适配GaussDB开源验证任务心得

举报
liubao68 发表于 2024/10/31 16:18:44 2024/10/31
【摘要】 Spring Data JPA适配GaussDB开源验证任务心得

Spring Data JPA适配GaussDB开源验证任务心得

第一步先看下任务计划书 https://bbs.huaweicloud.com/blogs/437919 ,大概了解了下这个任务的主要工作是完成 Spring Data JPA连接GaussDB的验证工作。总体来讲不是很复杂,主要是需要花时间熟悉DEMO的结构、环境搭建、扩展新功能和开发简单的界面展示效果。这部分内容在WIKI里面都有介绍,下面介绍下适配过程中的一些关键步骤。

先fork一下DEMO代码

先 fork 一下原始 DEMO: https://gitcode.com/HuaweiCloudDeveloper/servicecomb-fence , 本人已经加入了 HuaweiCloudDeveloper , 所以就 fork 到这个组织下面了: https://gitcode.com/HuaweiCloudDeveloper/opensource-demo-spring-data-jpa-241029 。命名规范是 opensource-demo + 项目名称 + 日期。 如果没有加入到 HuaweiCloudDeveloper, 也可以 fork 到自己的个人仓库。

开发过程

首先参考任务计划书给的参考资料: https://spring.io/guides/gs/accessing-data-jpa 。 把官网提供的原代码看了下, 并把关键的类信息拷贝过来, 包括 Customer.java, CustomerRepository.java。 官网采用的是内置数据库, 需要改为GaussDB。 我采用了 openGauss 提供的 JDBC 驱动。 过程中由于 DEMO 使用了 log4j2 记录日志, 和 spring data jpa 依赖的 logback 有冲突, 需要排除。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.opengauss</groupId>
  <artifactId>opengauss-jdbc</artifactId>
</dependency>

为了做好功能验证,增加了 AccessingDataJpaEndpoint.java 提供 REST 接口。 演示了增、查等功能。

最后就是要配置下 JPA, 主要有数据源配置和JPA配置两部分:

spring:
  datasource:
    url: ${DB_URL:jdbc:opengauss://172.0.0.1:8000/postgres?currentSchema=authentication_server_db} 
    username: ${DB_USERNAME:}
    password: ${DB_PASSWORD:}
    driver-class-name: org.opengauss.Driver
  jpa:
    database: postgresql
    show-sql: true
    hibernate:
      ddl-auto: update

开发过程中,少配置了 ddl-auto, 没有自动建表, 以为使用 openGauss 驱动或者使用 Hibernate postgresql dialect 和 GaussDB 存在不兼容, 中间查询了大量资料, 也没找到任何答案。 好在后面加上 ddl-auto 解决了问题。 问题记录在 : https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/13

开发总结

由于本任务是一个JAVA验证项目,部署和运行都是没什么问题的,因此相关的部署验证问题都不再描述了。 通过该任务,可以证明使用 openGauss 的 JDBC 驱动, 加上 Hibernate Postgresql dialect 是可以接入 GaussDB的。

作为一个商业的数据库(类别 Oracle 和 SqlServer等), 从Spring Data JPA的角度,可以发现 GaussDB还有很多不完善的地方。 大概有如下两个关键点:

  • GaussDB没有提供maven中央仓可获取的 JDBC 驱动。 因此对开源项目,只能使用 openGauss的驱动。
  • Hibernate没有提供openGauss和GaussDB的Dialect,只能使用PostgreSQL的。

总体看,虽然能够运行起来,还是给开发者不太可靠的感觉。 期望GaussDB能够更多支持开源社区的共建,提供稳定的,maven central可访问的JDBC驱动,也给 Hibernate贡献代码,定义自己的官方方言。

验收材料

交付件清单

验收细则 评分说明 是否为验收必选项 结果(通过/不通过) 开发者举证
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 完成GaussDB数据库适配功能验证。 参考资源清单和测试结果。
代码质量:适配华为三大根技术生态的代码质量经过工具检测达标 不涉及
提供相关文档,比如部署文档、使用文档、配置文档等 不涉及
合入到开源项目主仓:代码推送上游社区 不涉及
Deomo设计&开发:完成功能演示Demo的开发 举证提供DEMO仓库地址和DEMO开发提交记录。 参考(1)(2)
Demo部署&验证:完成功能演示DEMO基于华为云鲲鹏环境的部署和功能验证 提供DEMO部署验证结果的关键截图进行举证。提供DEMO运行环境和资源的规格清单。 参考资源清单和测试结果。
发布博客:发布博客介绍适配心得。 提供博客的地址。 参考(3)
制作单机版无高危开源镜像。 上架云商店。
单机版镜像上架时支持模板部署。
制作集群版无高危开源镜像 上架云商店。
集群版镜像上架时支持模板部署

资源清单


产品名称 产品类型 数据库引擎版本 内核引擎版本 实例类型 部署形态 备注
云数据库 GaussDB 基础版 V2.0-8.* 505.1.* 集中式 1主2备 推荐

产品名称 集群类型 集群版本 集群规模 备注
云容器引擎 CCE CCE Standard 集群 V1.29 50 推荐

产品名称 CPU架构 实例类型 公共镜像 镜像版本 备注
弹性云服务器 鲲鹏计算 鲲鹏通用计算增强型 Huawei Cloud EulerOS Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) 推荐

<!-- 数据库驱动和Spring Data JPA版本-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
  <version>3.3.1</version>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.opengauss</groupId>
  <artifactId>opengauss-jdbc</artifactId>
  <version>5.1.0-og</version>
</dependency>

测试结果

  • save接口

image.png

  • findById接口

image.png

  • findByLastName接口
    image.png
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。