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/OpenSourceForHuaweiDemoJava/overview , 本人已经加入了 HuaweiCloudDeveloper , 所以就 fork 到这个组织下面了: https://gitcode.com/HuaweiCloudDeveloper/opensource-demo-spring-data-jpa-241029 。命名规范是 opensource-demo + 项目名称 + 日期
。 如果没有加入到 HuaweiCloudDeveloper, 也可以 fork 到自己的个人仓库。
gitcode fork到同一个组织的代码,默认组织外的其他人是没有权限查看的。因此采用import的方式来fork代码。当然这样项目之间不存在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贡献代码,定义自己的官方方言。
- 点赞
- 收藏
- 关注作者
评论(0)