实践干货输出【SpringBoot + openGauss3开发入门】
本文介绍如何快速安装openGauss3,openGauss3的安装这是笔者浓缩提炼的,并且在Spring Boot中集成使用openGauss3数据库。
文章目录
- 单机版openGauss3快速环境安装
- 安装openGauss3注意事项
- springboot应用集成openGauss
- springboot集成opengauss的FAQ
- 最后总结
单机版openGauss3快速环境安装
groupadd dbgroup useradd -g dbgroup omm # 可后面安装时创建 passwd omm #设置密码为Gauss_1234
创建安装程序目标目录
mkdir /home/omm/opengauss3 chown -R omm:dbgroup /home/omm/opengauss3
下载opengauss3.00
mkdir /opengauss3 cd /opengauss3 wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.0.0/x86/openGauss-3.0.0-CentOS-64bit-all.tar.gz
解压文件
tar -zvxf openGauss-3.0.0-CentOS-64bit-all.tar.gz tar zxvf openGauss-3.0.0-CentOS-64bit-cm.tar.gz tar zxvf openGauss-3.0.0-CentOS-64bit-om.tar.gz
设置opengauss集群配置文件,这里设单点安装
[root@enmoedu1 opengauss3]# cat cluster_config.xml <?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="hostname" /> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/home/omm/opengauss3/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/var/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/home/omm/opengauss3/tmp" /> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/home/omm/opengauss3/install/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/home/omm/opengauss3/corefile" /> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="[root@enmoedu1 opengauss3]# cat cluster_config.xml <?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="hostname" /> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/home/omm/opengauss3/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/var/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/home/omm/opengauss3/tmp" /> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/home/omm/opengauss3/install/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/home/omm/opengauss3/corefile" /> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="IP"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="hostname"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="IP"/> <PARAM name="sshIp1" value="IP"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/home/omm/opengauss3/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> </DEVICELIST> </ROOT>"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="hostname"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="IP"/> <PARAM name="sshIp1" value="IP"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/home/omm/opengauss3/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> </DEVICELIST> </ROOT>
前置系统软件包
yum install -y epel-release yum install -y bzip2 # 安装bzip2用于后面的解压openGauss安装包 sed -i 's/源IP/目标IP/g' cluster_config.xml sed -i 's/hdp1/你的主机名/g' cluster_config.xml
初始化系统安装配置参数,以必须管理员root的权限运行,进入opengauss3运行初始化程序
[root@hdp1 ~]# cd /opengauss3/ [root@hdp1 opengauss3]# ./script/gs_preinstall -U omm -G dbgroup -X ./cluster_config.xml Parsing the configuration file. Successfully parsed the configuration file. Installing the tools on the local node. Successfully installed the tools on the local node. Setting host ip env Successfully set host ip env. Are you sure you want to create the user[omm] (yes/no)? no Preparing SSH service. Successfully prepared SSH service. Checking OS software. Successfully check os software. Checking OS version. Successfully checked OS version. Creating cluster's path. Successfully created cluster's path. Set and check OS parameter. Setting OS parameters. Successfully set OS parameters. Warning: Installation environment contains some warning messages. Please get more details by "/opengauss3/script/gs_checkos -i A -h hdp1 --detail". Set and check OS parameter completed. Preparing CRON service. Successfully prepared CRON service. Setting user environmental variables. Successfully set user environmental variables. Setting the dynamic link library. Successfully set the dynamic link library. Setting Core file Successfully set core path. Setting pssh path Successfully set pssh path. Setting Cgroup. Successfully set Cgroup. Set ARM Optimization. No need to set ARM Optimization. Fixing server package owner. Setting finish flag. Successfully set finish flag. Preinstallation succeeded.
下面要以omm的用户正式运行安装程序,首先必须把权限赋给omm
chown -R omm:dbgroup /opengauss3
切换到 omm,在/opengauss3目录下运行安装目录
[root@hdp1 opengauss3]# su omm [omm@hdp1 opengauss3]$ ./script/gs_install -X ./cluster_config.xml Parsing the configuration file. Check preinstall on every node. Successfully checked preinstall on every node. Creating the backup directory. Successfully created the backup directory. begin deploy.. Installing the cluster. begin prepare Install Cluster.. Checking the installation environment on all nodes. begin install Cluster.. Installing applications on all nodes. Successfully installed APP. begin init Instance.. encrypt cipher and rand files for database. Please enter password for database: Please repeat for database: begin to create CA cert files The sslcert will be generated in /home/omm/opengauss3/install/app/share/sslcert/om NO cm_server instance, no need to create CA for CM. Cluster installation is completed. Configuring. Deleting instances from all nodes. Successfully deleted instances from all nodes. Checking node configuration on all nodes. Initializing instances on all nodes. Updating instance configuration on all nodes. Check consistence of memCheck and coresCheck on database nodes. Configuring pg_hba on all nodes. Configuration is completed. Successfully started cluster. Successfully installed application. end deploy..
验证服务进程是否激 活
[root@hdp1 ~]# ps -eaf | grep omm root 14898 32160 0 15:55 pts/1 00:00:00 su omm omm 14899 14898 0 15:55 pts/1 00:00:00 bash omm 19411 1 9 16:08 ? 00:00:02 /home/omm/opengauss3/install/app/bin/gaussdb -D /home/omm/opengauss3/install/data/dn root 19784 360 0 16:09 pts/2 00:00:00 grep --color=auto omm
命令行登录
gsql -d postgres -p 15400
安装openGauss3注意事项
之前安装mogdb,影响了opengauss3的环境,/home/omm/.bashrc 里面记录了安装后的变量,如果要卸载opengauss,必须要把.bashrc 下面所有的东西都去掉。
# User specific aliases and functions export GPHOME=/home/omm/opengauss3/install/om export PATH=$GPHOME/script/gspylib/pssh/bin:$GPHOME/script:$PATH export LD_LIBRARY_PATH=$GPHOME/lib:$LD_LIBRARY_PATH export PYTHONPATH=$GPHOME/lib export GAUSSHOME=/home/omm/opengauss3/install/app export PATH=$GAUSSHOME/bin:$PATH export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH export S3_CLIENT_CRT_FILE=$GAUSSHOME/lib/client.crt export GAUSS_VERSION=3.0.0 export PGHOST=/home/omm/opengauss3/tmp export GAUSSLOG=/var/log/omm/omm umask 077 export GAUSS_ENV=2 export GS_CLUSTER_NAME=dbCluster
springboot应用集成openGauss
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸,面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。
简而言之SOA可以消除信息孤岛并实现共享业务重用,我们通过SOA可以打造下图的复杂系统,其中蓝色用户服务 ,我们可以通过springboot + openGauss 技术实现。
我们使用OpenGauss作为具体数据存储,使用开发工具创建一个数据库mysqltest,并在mysqltest数据库中创建一张表userennity和user1,创建语句如下:
create table userentity( id int , username varchar(50), password varchar(50), user_sex varchar(10), nick_name varchar(50) ); create table user1( id int , name varchar(50), password varchar(50));
DEMO代码
±–src
| ±–main
| | ±–java
| | | —com
| | | —main
| | | ±–controler 具体业务逻辑
| | | ±–mapper 定义实现DAO的CRUD实体操作
| | | ±–model 实体类
| | | —service 实现服务类
注意UserControler是首先调用的service,继而去调用实体操作。
而UserEntityControler是通过mapper的封装去调用 DAO的CRUD的操作,如下
无论是UserControler还是 UserEntityControler 都需要底层数据库对应用支持友好。
确定opengauss的用户、密码、端口及相关IP
启动服务
服务正在运行中
查看用户实体1
查看用户实体2
springboot集成opengauss的FAQ
用户名/密码不对
spring报错
### The error may involve com.main.mapper.UserMapper.getAll ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.postgresql.util.PSQLException: 不明的原因导致驱动程序造成失败,请回报这个例外。] with root cause java.lang.NullPointerException: null
而opengauss内部执行报错
[omm@enmoedu1 ~]$ gsql -U henley -h 192.168.30.65 -p 15400 Password for user henley: gsql: FATAL: Invalid username/password,login denied.
根本原因分析
openGauss默认是sha256,而登录则设成只允许md5登录,所以一直识用户名和密码错误
解决方法及步骤
vi /home/omm/opengauss3/install/data/dn/postgresql.conf 修改设置 encryption_type = 1 vi /home/omm/opengauss3/install/data/dn/pg_hba.conf 增加设置 host all henley 0.0.0.0/0 md5
重启openGauss服务
用户没有对表的操作权限
spring报错
org.postgresql.util.PSQLException: ERROR: permission denied for relation userentity 详细:N/A
opengauss报错
mytest=> SELECT id, userName, passWord, user_sex, nick_name FROM userentity; ERROR: permission denied for relation userentity DETAIL: N/A
解决方法及步骤
以postgres的身份登录root
[omm@enmoedu1 ~]$ gsql -d postgres -p 15400 gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:34 commit 0 last mr ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. 切换到指定的数据库 openGauss=# \c mytest; Non-SSL connection (SSL connection is recommended when requiring high-security) You are now connected to database "mytest" as user "omm". 执行授权 mytest=# GRANT ALL PRIVILEGES ON userentity TO henley; GRANT
授权后能够正常,但是发现一个问题,现在我们是通过Postgresql的jdbc驱动去访问OpenGauss的,OpenGauss没有自己的原生jdbc驱动吗?答案是有的,而且还支持maven方式,见下。
<!-- 加载jdbc连接数据库 --> <!--<dependency>--> <!--<groupId>org.opengauss</groupId>--> <!--<artifactId>opengauss-jdbc</artifactId>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.bouncycastle</groupId>--> <!--<artifactId>bcprov-jdk15on</artifactId>--> <!--<version>1.70</version>--> <!--</dependency>-->
但是笔者的运气很差,通过maven一直无法下载openGauss的core包,只能通过手动的方式下载。
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/ 3.0.0/x86/openGauss-3.0.0-JDBC.tar.gz
再在idea把jar包引入进来,引入步骤 Project Structure --> Project Settings --> Libraries --> Add(alt +insert) --> apply
application.properties稍微修改一下
spring.datasource.url=jdbc:opengauss://192.168.30.65:15400/mytest spring.datasource.driver-class-name=org.opengauss.Driver #spring.datasource.url=jdbc:postgresql://XXXX:5432/mytest #spring.datasource.url=jdbc:postgresql://XXXX:15400/mytest spring.datasource.url=jdbc:opengauss://XXXX:15400/mytest spring.datasource.username=henley spring.datasource.password=XXXX spring.datasource.driver-class-name=org.opengauss.Driver #spring.datasource.driver-class-name=org.postgresql.Driver ### mybatis config ### mybatis.config-locations=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.type-aliases-package=com.main.model
最后总结
openGauss对业界知名的spring支持还算友好,直接用传统的postgresql驱动就可以接入使用,也有自己的opengauss驱动。如果使用顺利,还可以支持分布式配置、服务路由、负载均衡、熔断限流、链路监控这些功能,事实上在微服务的技术框架上也是支持的。
源代码体验:
https://gitee.com/angryart/springboot-opengauss

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数据驱动测试-从方法探研到最佳实践
作者:刘红妍 导读 在自动化测试实践中,测试数据是制造测试场景的必要条件,本文主要讲述了在沟通自动化框架如何分层,数据如何存储,以及基于单元测试pytest下如何执行。并通过实践案例分享,提供数据驱动测试的具体落地方案。 基本概念 数据驱动测试(DDT)是一种方法,其中在数据源的帮助下重复执行相同顺序的测试步骤,以便在验证步骤进行时驱动那些步骤的输入值和/或期望值。在数据驱动测试的情况下,环境设置和控制不是硬编码的。换句话说,数据驱动的测试是在框架中构建要与所有相关数据集一起执行的测试脚本,该脚本利用了可重用的测试逻辑。数据驱动的测试提供了可重复性,将测试逻辑与测试数据分离以及减少测试用例数量等优势。 设计思路 2.1 测试数据 在测试过程中往往需要更加充分地测试场景,而创建数据测试。测试数据包括输入输出,对输出的自动化验证等。创建测试数据,可以通过手动拼装,生产环境拷贝,或通过自动化工具生成。 2.2 数据存储 数据驱动测试中使用的数据源可以是Excel文件,CSV文件,Yaml文件,数据池,ADO对象或ODBC源。 2.3 数据驱动优势 1. 如果应用程序开发还在进行当中,测试者仍...
- 下一篇
汽车行业:充分借力数据价值,推动数字化营销链路闭环
当下,汽车行业已慢慢由曾经的增量市场逐步转变为存量市场。更年轻的消费群体偏好、更精准智能的营销投放策略和强势入局的新能源汽车等因素都在推动着汽车行业的不断发展。对于汽车厂商和垂域媒体来说,进行丰富的人群洞察与用户分层,能挖掘更多用户生命周期内的价值。 联合建模,精准拉新 随着电商与短视频的快速发展,汽车厂商的广告投放渠道有了更多选择。人群标签的细分和精准程度决定着实际的投放效果,各大数据平台的标签虽然细化,但很多依旧缺乏对汽车行业的深度洞察。 HMS Core 分析服务(即华为分析)基于业务需求场景,搭建定制化标签体系。同时,通过联合建模的方式,充分发挥华为设备系统级数据优势,以设备系统级数据融合应用内行为数据,深度洞察人群特征,帮助企业精准挖掘更多隐藏的潜在意向人群,有效提升广告投放效率,实现精准拉新。 *联合建模投放效果示意 高价值线索孵化,缩短转化周期 汽车厂商在选择投放渠道时,由于汽车类垂直媒体人群更聚焦,往往成为投放首选。而能否为厂商带来持续可孵化的高价值线索,成为垂域媒体的重要价值考量。 华为分析服务除了与华为应用市场付费推广平台建立便捷稳定的转化事件回传通道,帮助企业实现...
相关文章
文章评论
共有0条评论来说两句吧...