1 概述
1.1 背景介绍
云数据库GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。
通过该案例,大家可以学习GaussDB数据库的简单使用,并在代码中如何通过JDBC驱动操作数据库,体验数据应用和迁移UGO服务的SQL转换能力,助力数据库迁移。
1.2 适用对象
- 企业
- 个人开发者
- 高校学生
1.3 案例时间
本案例总时长预计120分钟。
1.4 案例流程
{{{width="70%" height="auto"}}}
说明:
① 下载电商项目代码; ② 安装Redis数据库; ③ 购买&初始化GaussDB数据库; ④ 改造电商项目; ⑤ 运行电商项目。
1.5 资源总览
本案例预计花费总计8元。体验完成后请及时释放资源,避免产生多余的费用。
| 资源名称 | 规格 | 单价(元) | 时长(分钟) |
|---|---|---|---|
| GaussDB数据库 | X86计算,通用计算增强型 | c7.large.2 | 2 vCPUs | 4 GiB CentOS 7.6 64bit (40GB) | 3.7 | 120 |
| 弹性公网IP | 按需计费|按流量计费 5Mbit/s | 0.02+0.8元/GB | 120 |
| 华为开发者空间—云主机 | 鲲鹏通用计算增强型 kc2.xlarge.2 | 4vCPUs8G | Ubuntu | 免费 | 120 |
2 电商项目数据迁移步骤
2.1 下载项目代码
登录开发者空间:https://developer.huaweicloud.com/space/devportal/desktop。

点击“进入桌面”,进入云主机,在云主机桌面右键打开“终端”。

创建/home/developer/my_code目录,以此目录存放代码,然后进入此目录。

执行下载代码命令,完成下载:
# 克隆命令
git clone https://gitcode.com/CaseDeveloper/E-Commerce-Java.git
git clone https://gitcode.com/CaseDeveloper/E-Commerce-Web.git

2.2 安装Redis
在终端中,更新软件包,交互方式选择Y或直接回车Enter:
sudo apt update -y
sudo apt upgrade -y

安装Redis,执行命令:
sudo apt install -y redis-server

查看版本:
redis-cli --version

2.3 准备GaussDB数据库
登录华为云控制台,搜索云数据库GaussDB,点击“创建”。

当前案例建议选择“华南-广州”区域,因为该区域支持集中式版1主1备1日志部署形态,费用较低。也可以选择其他区域,但只能购买集中式版1主2备费用比前者高一点。注意保持后续创建的其他云服务保持同一区域,点击“购买数据库实例”。

数据库规格:其他默认即可,费用¥3.70/小时。预计创建耗时20分钟,期间可以先熟悉实验步骤。
| 配置项 | 规格 |
|---|---|
| 计费模式 | 按需计费 |
| 区域 | 华南-广州 |
| 产品类型 | 基础版 |
| 数据库引擎版本 | 最新版本 |
| 实例类型 | 集中式版 |
| 部署形态 | 1主1备1日志 |
| 性能规格 | 通用型4vCPUs|16GB |
| 存储空间 | 40GB |
| 虚拟私有云 | 没有新建即可 |
| 安全组 | 没有则新建,有则给安全组添加规则,对以下网段开放8000端口:1.92.0.0/16,1.94.0.0/16, 113.44.0.0/16,116.205.0.0/16, 120.46.0.0/16,123.249.0.0/16,124.70.0.0/16 |
| 管理员密码 | 自定义 |
购买弹性公网IP,规格如下:其他默认即可,弹性公网IP保有费¥0.02/小时+公网流量费¥0.8/小时。
| 配置项 | 规格 |
|---|---|
| 计费模式 | 按需计费 |
| 线路 | 全动态BGP |
| 公网带宽 | 按流量计费|5Mbit/s |
| 带宽名称 | 自定义 |
| 弹性公网IP名称 | 自定义 |
当GaussDB数据库和弹性公网IP创建完成后,给GaussDB实例主节点绑定弹性公网,后续在云主机使用弹性公网IP连接数据库。绑定后点击右上角“登录数据库”。

输入密码测试连接后登录。

登录成功后创建数据库commerce。

数据库创建完成后,可以使用E-Commerce-Java项目中的db_init_test.sql脚本进行创建表并插入测试数据。由于db_init_test.sql是MySQL导出的脚本,需要先进行SQL语句转换,将脚本中SQL转换为适配GaussDB的SQL语句,借助工具:华为云数据库和应用迁移UGO。
打开工具,源端SQL语句选择“MySQL”,目标端SQL语句选择“GaussDB 集中式版(B兼容)V2.0-8.0 企业版”然后复制db_init_test.sql中SQL语句到左边窗口,点击SQL转换。

得到转换后的SQL,去到登录后的GaussDB实例commerce数据库下执行SQL。

至此,数据库已初始化完成。
2.4 改造电商项目
在云主机桌面打开CodeArts IDE for Java,打开E-Commerce-Java项目,等待模型同步成功。构建方式弹窗选择“Use Maven”。


修改工程JDK版本为JDK1.8,点击IDE左上角“文件”,点击“Java智能助手设置”,选择JDK1.8解压目录,点击确定。

下载GaussDB驱动包,解压获取GaussDB_driver/Centralized/Euler2.5_X86_64/opengaussjdbc.jar驱动并在项目下新建lib目录放置驱动,修改pom.xml文件中JDBC驱动为opengaussjdbc,重新加载依赖。
<dependency>
<systemPath>${project.basedir}/lib/opengaussjdbc.jar</systemPath>
<groupId>com.huawei.opengauss.jdbc</groupId>
<artifactId>opengaussjdbc</artifactId>
<version>1.0.0</version>
<scope>system</scope>
</dependency>

修改application.yml中数据库连接信息,其中数据库IP使用GaussDB数据库绑定的弹性公网IP,密码是购买GaussDB数据库时设置的密码。

由于order、user在GaussDB中为保留关键字,不能作用于其他标识符,可以通过添加schema来指定其为某个指定schema下的表。为了预防未来GaussDB增加其他关键字设置导致SQL执行报错,可以为所有SQL中表明指定schema,所以需要修改CartMapper.java、CommodityMapper.java、OrderMapper.java、UsersMapper.java中SQL,指定表schema为public。
如OrderMapper和UsersMapper的修改参考:

另外,关于结算接口业务中,需要向订单表中插入新的数据,而UGO在进行SQL转换时,是将MySQL中的json类型转换成了jsonb类型,直接插入json字符串会报错,可以使用PGObject类来处理jsonb数据。
需要修改CartServiceImpl.java、OrderMapper.java文件,修改内容如下:

2.5 运行电商项目
2.5.1 启动后端服务
打开src/main/java/org/example/CommerceApplication.java启动类,点击编辑窗口左侧运行按钮,选择运行主程序。

2.5.2 启动前端服务
安装nvm(Node版本管理器)
# 使用国内镜像源(如 gitee)下载并安装 nvm
export NVM_SOURCE=https://gitee.com/mirrors/nvm.git
curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash
# 查看nvm是否生效,根据提示,让nvm生效(运行提示命令或者重启终端)
nvm
若nvm命令未生效,见上一步提示配置临时环境变量,这里仅为参考。
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
( 注意*:安装脚本提示的命令是配置临时环境变量,仅对当前终端会话有效。如果要配置永久全局配置,请写入到~/.bashrc文件并执行source ~/.bashrc重建加载配置文件。)
下载并安装 Node.js。
nvm install 22
验证版本。
node -v
npm -v
打开终端,进入前端项目目录。
cd /home/developer/my_code/E-Commerce-Web/
拉取项目依赖。
npm install
启动项目。
npm run dev
使用浏览器访问http://localhost:3000。

可以注册账号体验功能,验证无误证明案例成功完成,可以自由选择结束案例或继续开发或验证其他问题。
如结束案例,请务必释放资源! 如果想要直接获取改造后的电商后端服务可以访问:https://gitcode.com/CaseDeveloper/E-Commerce-GaussDB 如果想了解更多云数据库GaussDB内容可以访问:https://bbs.huaweicloud.com/contents/sql/gaussdb-community.html
3 释放资源
3.1 释放GaussDB数据库
云数据库GaussDB和弹性公网IP会持续计费,体验完成后请及时释放资源,避免产生多余的费用。
登录华为云控制台GaussDB页面,在实例列表中选择之前创建的实例进入基本信息页,下拉到底部节点列表,在主节点后选择更多操作,选择解绑弹性公网IP。
回退到GaussDB实例列表页选择之前创建的实例后更多操作,选择删除实例。

再到弹性公网IP页面,选择之前创建的弹性公网IP,点击实例后更多操作,选择释放。

3.2 资源检查
在控制台点击“更多 | 资源 | 我的资源”菜单项,检查资源是否全部删除。
注意:(1) 虚拟私有云VPC和安全组可以不删除,以留下次使用。(2) 若在其他区域购买了GaussDB和EIP等资源,请切换到那个区域查看。
4 问题记录
4.1 项目运行问题
1、关键字问题
报错:ERROR: syntax error at or near "order"或ERROR: syntax error at or near "user"
解决:检查触发接口对应得Mapper中SQL,在user、order表前加“public.”指定schema。
2、结算失败1
报错:ERROR: column "commodity_list" is of type jsonb but expression is of type character varying
解决:UGO在进行SQL转换时,是将MySQL中的json类型转换成了jsonb类型,直接插入json字符串会报错,可以使用JDBC驱动中提供的PGObject类来处理jsonb数据。参考2.5改造电商项目最后一步。
3、结算失败2
报错:ERROR: syntax error at or near "`"
解决:在OrderMapper.java中SQL,将“`”去掉。
6万+

被折叠的 条评论
为什么被折叠?



