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贡献代码,定义自己的官方方言。
验收材料
交付件清单
- (1) DEMO仓库地址: https://gitcode.com/HuaweiCloudDeveloper/opensource-demo-spring-data-jpa-241029
- (2) DEMO开发提交记录: https://gitcode.com/HuaweiCloudDeveloper/opensource-demo-spring-data-jpa-241029/commits/detail/af15181ae54699350ced18bba13bfa217f1f3a58?ref=master
- (3) 博客的地址: https://bbs.huaweicloud.com/blogs/438331
验收细则 | 评分说明 | 是否为验收必选项 | 结果(通过/不通过) | 开发者举证 |
---|---|---|---|---|
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 | 完成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接口
- findById接口
- findByLastName接口
- 点赞
- 收藏
- 关注作者
评论(0)