[信创]SpringBoot3 JDK17 整合 MyBatis + Oceanbase(二)
connygpt 2024-11-21 13:24 18 浏览
前面介绍了 OceanBase 按需选择的各种部署方案,本文接着把后半部完成。
1. 监控与管理工具
先来看一下 oceanbase 自带的服务和性能监控工具 grafana 和 prometheus,前一篇我们已经完成了它们的安装,并已启动。
1.1. Grafana
前文提到 Grafana 是一款开源的数据可视化工具,可以将数据源中的各种指标数据进行可视化展示,以便更直观地了解系统运行状态和性能指标。这里也简单的跑起来看看。
不过在这之前,先做个实验,试试把虚拟机的内存从 10G 调低到 8G 是否可行。修改之后重启服务,结果报错:内存不足,没辙只好重新改回 10G。
回到 grafana 的使用吧,在服务启动过程中可以看到 grafana 服务的地址和初始账号信息:
不过要在浏览器中打开,还需要开放端口:
[root@localhost ~]# firewall-cmd --permanent --add-port=3000/tcp success [root@localhost ~]# firewall-cmd --reload success
这时就可以在浏览器中输入 URL,按提示输入用户名密码,就可以看到服务器的性能指标了:
看起来还是不错的[给力]
1.2. Prometheus
再来看 Prometheus,它是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型以及快捷数据采集、存储和查询接口。同样在启动过程中会输出该服务的相关信息:
类似的,也要先开放端口:
[root@localhost ~]# firewall-cmd --permanent --add-port=9090/tcp success [root@localhost ~]# firewall-cmd --reload success
然后在浏览器输入 URL 打开。Alerts 页面用来查看异常情况:
Status 下面的 Rules 页面,可以看到超出规则指标的警告:
2. 数据库规划
单机最小化集群:demo (前文已完成)
系统租户:sys (随集群自动创建)
root 用户密码:123456789(密码待修改)
连接命令:obclient -h127.0.0.1 -P2881 -uroot@sys -p -Doceanbase -A
业务租户:obmysql(待创建)
root 用户密码:123456(待创建)
连接命令:obclient -h127.0.0.1 -uroot@obmysql -P2881 -p123456 -A
业务数据库:mydb(待创建)
user 表(待创建)
2.1. 修改系统租户的密码
系统租户 sys 的 root 用户的默认密码为空,这里把它修改为 123456789。
# admin 账号登录 linux,执行如下命令 [admin@localhost ~] obd cluster edit-config demo # 在 oceanbase-ce/global的最后增加一行: # root_password: 123456789,如下图
# 使修改生效 [admin@localhost ~] obd cluster reload demo
分别采用无密码和新密码来连接,验证密码设置成功:
2.2. 创建租户 obmysql(数据库实例)
在 OceanBase 中,数据是按照租户来组织的,所以首先应创建一个租户实例(数据库实例)。创建之前,应该先了解一下租户类型:
系统租户:集群默认创建的租户,与集群生命期一致,负责管理集群和所有租户的生命周期。系统租户数据是集群私有的,不支持物理备份恢复。
用户租户:用户租户是由用户创建的租户,对外提供完整的数据库功能,支持 MySQL 和 Oracle 两种兼容模式。
Meta 租户:Meta 租户是 OceanBase 数据库内部自管理的租户,每创建一个用户租户会创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。Meta 租户用于存储和管理用户租户的租户私有数据,这部分数据不需要跨库物理同步以及物理备份恢复。Meta 租户不可登录,普通用户只能通过系统租户的视图查询 Meta 租户下的数据。
部署 OceanBase 之后,建议创建用户租户进行业务操作。sys 租户仅做集群管理使用,不适合在业务场景中使用。租户创建后,租户类型无法修改,因此创建租户前请规划好租户类型。本文选择 MySQL 租户类型。
2.2.1. 创建方法一
使用 obd 工具,用法如下:
# 语法:obd cluster tenant create <deploy name> [-n <tenant name>] [flags] # -n tenant_name # --max-iops Max IOPS unit nuber # --unit-num pool unit nuber obd cluster tenant create demo -n obmysql --max-cpu=2 --memory-size=2G --log-disk-size=3G --max-iops=10000 --iops-weight=2 --unit-num=1 --charset=utf8mb4
租户创建成功后,默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空。
[admin@localhost ~]$ obclient -h127.0.0.1 -uroot@obmysql -P2881 -p -Doceanbase -A Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221494035 Server version: OceanBase_CE 4.2.1.2 (r102000042023120514-ccdde7d34de421336c5362483d64bf2b73348bd4) (Built Dec 5 2023 14:34:01) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
查看租户信息,如上使用 obclient 工具连接新创建的租户后,使用下面 SQL 语句查询:
obclient [oceanbase]> select * from __all_unit_config; obclient [oceanbase]> select * from dba_ob_tenants; obclient [oceanbase]> show tenant;
修改允许任意主机登录,默认只能从本机登录。
# 使用租户 obmysql 的 root 用户登录 [admin@localhost ~]$ obclient -h127.0.0.1 -uroot@obmysql -P2881 -p -Doceanbase -A # 修改允许任意主机登录 obclient [oceanbase]> alter tenant obmysql set variables ob_tcp_invited_nodes='%';
看到这里是不是有种强烈的熟悉感,没错和 MySQL 一样的操作。后面就可以把 obmysql 当作 MySQL Server 来看待。
修改租户的 root 用户密码:
# 查看当前租户 obclient [oceanbase]> show tenant; # 修改当前租户的 root 用户的密码 obclient [oceanbase]> alter user root identified by '123456';
2.2.2. 创建方法二
使用系统租户 sys,连接到 OceanBase 服务器,执行 SQL 命令来创建一个用户租户。
步骤一:创建资源规格
# 使用 sys 租户的 root 用户登录 [admin@localhost ~]$ obclient -h127.0.0.1 -P2881 -uroot@sys -p123456789 -A # 选择 oceanbase 数据库 obclient [(none)]> use oceanbase; # 通过 DBA_OB_UNIT_CONFIGS 视图,获取已有的资源规格信息 obclient [oceanbase]> select * from dba_ob_unit_configs; # 创建资源规格 CREATE RESOURCE UNIT dbmysql2_unit_config MEMORY_SIZE = '2G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '2G', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1; # 查看资源规格是否创建成功 obclient [oceanbase]> SELECT * FROM DBA_OB_UNIT_CONFIGS WHERE NAME = 'dbmysql2_unit_config';
步骤二:创建资源池
# CREATE RESOURCE POOL dbmysql2_pool UNIT='dbmysql2_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2'); CREATE RESOURCE POOL dbmysql2_pool UNIT='dbmysql2_unit_config', UNIT_NUM=1; # 查询 DBA_OB_RESOURCE_POOLS 视图,确认资源池创建成功 obclient [oceanbase]> SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'dbmysql2_pool';
步骤三:创建租户
# 创建租户 # CREATE TENANT IF NOT EXISTS dbmysql2 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('dbmysql2_pool'), charset='utf8mb4' set OB_TCP_INVITED_NODES='%'; CREATE TENANT IF NOT EXISTS dbmysql2 PRIMARY_ZONE='RANDOM', comment 'mysql tenant instance', RESOURCE_POOL_LIST=('dbmysql2_pool'), charset='utf8mb4' set OB_TCP_INVITED_NODES='%';
2.3. 连接租户 obmysql
使用新创建的租户的用户名和密码连接到 OceanBase 服务器。支持通过客户端、驱动或 ORM 框架连接到 OceanBase 数据库的租户。
# 使用租户 obmysql 的 root 用户登录 [admin@localhost ~]$ obclient -h127.0.0.1 -uroot@obmysql -P2881 -p -Doceanbase -A [admin@localhost ~]$ obclient -h127.0.0.1 -uroot@obmysql -P2883 -p123456 -Doceanbase -A
2.4. 创建业务数据库 mydb 和 user 表
连接到相应的租户 obmysql(可以把它看作是 MySQL Server)后,就可以在其上创建自己的业务数据库了,可以创建很多个哦,和在 MySQL Server 上创建多个 DB 是一样一样的。
obclient> CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 READ WRITE; obclient> SHOW DATABASES; obclient> USE mydb; obclient> CREATE TABLE user (seq INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), gender VARCHAR(20), birthday DATE);
查看是否创建成功:
插入两条数据:
# 插入两行数据 obclient [mydb]> insert user(name, gender, birthday) values("张三", "男", "2000-01-01"),("李四", "女", "2008-02-02"); Query OK, 2 rows affected (0.038 sec) Records: 2 Duplicates: 0 Warnings: 0 # 查看数据 obclient [mydb1]> select * from user;
3. SpringBoot3 + MyBatis + OceanBase 实现增删改查
这里不再从头开始,而是基于前面 SpringBoot3 + MyBatis + 达梦8 文章中的实现直接修改依赖,连接字符串,并微调 Mapper 接口即可实现。
3.1. 基于 dm8 的代码,修改驱动依赖,POM.xml
<!-- 把原来达梦的驱动换成 mysql 的驱动 --> <!-- <dependency>--> <!-- <groupId>com.dameng</groupId>--> <!-- <artifactId>DmJdbcDriver18</artifactId>--> <!-- <version>8.1.3.62</version>--> <!-- </dependency>--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>
3.2. 基于 dm8 的代码实现,修改 application.yml 中的数据源配置
spring: datasource: #driver-class-name: dm.jdbc.driver.DmDriver driver-class-name: com.mysql.cj.jdbc.Driver #url: jdbc:dm://192.168.1.107:5236?schema=DEMO&genKeyNameCase=2&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://192.168.1.105:2881/mydb?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root@obmysql password: '123456' mybatis: configuration: mapUnderscoreToCamelCase: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.3. 修改 DAO(MyBtis Mapper 接口),去掉为了达梦大小写而加的引号
查
@Repository public interface UserDao { @Select("select * from user") List<UserEntity> list(); ... }
改
@Repository public interface UserDao { ... ... @Update({ "<script>" + "update user " + "<set>" + "<if test='name != null'>name=#{name},</if> " + "<if test='birthday != null'>birthday=#{birthday},</if> " + "<if test='gender != null'>gender=#{gender},</if> " + "</set> " + "where seq=#{seq}" + "</script>" }) int update(UserEntity product); ... ... }
删
@Repository public interface UserDao { ... @Delete("delete from user where seq= #{seq}") int delete(Long seq); ... }
增
@Repository public interface UserDao { ... @Insert( "insert into user (name, birthday, gender) values (#{name}, #{birthday, jdbcType=DATE}, #{gender})" ) @Options(useGeneratedKeys = true, keyProperty = "seq", keyColumn = "seq") int insert(UserEntity product); ... }
全文完成,感谢阅读[比心]
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)