官网链接推荐:跳转官网 | 5.0.0中文文档 | 影子库压测介绍
二、环境准备 1、数据库准备cyun_log_0数据库
CREATE DATABASE `cyun_log_0` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `cyun_log_0`;
DROP TABLE IF EXISTS `t_sys_log`;
CREATE TABLE `t_sys_log`
(
`id` varchar(32) NOT NULL COMMENT '日志ID',
`application_name` varchar(32) NOT NULL COMMENT '服务名称',
`log_type` int(2) NOT NULL DEFAULT '0' COMMENT '日志类型(0-未知、1-登录日志、2- *** 作日志、3-定时任务日志)',
`operate_type` int(2) DEFAULT NULL COMMENT ' *** 作类型(0-未知、1-查询、2-添加、3-更新、4-删除、5-导入、6-导出)',
`log_content` varchar(1000) DEFAULT NULL COMMENT '日志描述信息',
`ip` varchar(100) DEFAULT NULL COMMENT 'IP',
`method` varchar(500) DEFAULT NULL COMMENT '请求java方法',
`request_url` varchar(255) DEFAULT NULL COMMENT '请求路径',
`request_param` longtext COMMENT '请求参数',
`request_type` varchar(10) DEFAULT NULL COMMENT '请求类型',
`cost_time` bigint(20) DEFAULT NULL COMMENT '耗时(单位:毫秒)',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='系统日志表';
cyun_log_1数据库
CREATE DATABASE `cyun_log_1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `cyun_log_1`;
DROP TABLE IF EXISTS `t_sys_log`;
CREATE TABLE `t_sys_log`
(
`id` varchar(32) NOT NULL COMMENT '日志ID',
`application_name` varchar(32) NOT NULL COMMENT '服务名称',
`log_type` int(2) NOT NULL DEFAULT '0' COMMENT '日志类型(0-未知、1-登录日志、2- *** 作日志、3-定时任务日志)',
`operate_type` int(2) DEFAULT NULL COMMENT ' *** 作类型(0-未知、1-查询、2-添加、3-更新、4-删除、5-导入、6-导出)',
`log_content` varchar(1000) DEFAULT NULL COMMENT '日志描述信息',
`ip` varchar(100) DEFAULT NULL COMMENT 'IP',
`method` varchar(500) DEFAULT NULL COMMENT '请求java方法',
`request_url` varchar(255) DEFAULT NULL COMMENT '请求路径',
`request_param` longtext COMMENT '请求参数',
`request_type` varchar(10) DEFAULT NULL COMMENT '请求类型',
`cost_time` bigint(20) DEFAULT NULL COMMENT '耗时(单位:毫秒)',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='系统日志表';
2、使用Mybatis生成t_sys_log表对应得映射文件
三、Spring Boot整合Sharding Sphere Jdbc实现影子库压测
1、引入pom.xml依赖
<dependency>
<groupId>org.apache.shardingspheregroupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starterartifactId>
<version>5.0.0version>
dependency>
2、application.yml配置文件
server:
port: 7207
servlet:
context-path: /sharding_sphere/shadow
# ShardingSphere 数据分片 单数据源
spring:
main:
allow-bean-definition-overriding: true
shardingsphere:
datasource:
# 数据源
names: ds,ds-shadow
# 日志类型:未知、 *** 作日志
ds:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:7000/cyun_log_0?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
# 日志类型:登录日志、定时任务日志
ds-shadow:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:7000/cyun_log_1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
# 使用模式,支持三种模式:内存模式、单机模式、集群模式
mode:
type: Memory
props:
# 打印sql
sql-show: true
# 注解影子算法:解析 SQL 注释配置项
sql-comment-parse-enabled: true
# 规则
rules:
# 影子库配置
shadow:
# 影子库开关
enable: true
# 数据源配置
dataSources:
shadowDataSource:
# 生产数据源名称
sourceDataSourceName: ds
# 影子数据源名称
shadowDataSourceName: ds-shadow
tables:
t_sys_log:
# 影子表关联影子数据源名称列表(多个值用","隔开)
dataSourceNames: shadowDataSource
# 影子表关联影子算法名称列表(多个值用","隔开)
shadowAlgorithmNames: user-id-insert-match-algorithm,simple-note-algorithm
# 影子算法名称
shadowAlgorithms:
# 自定义算法名称
user-id-insert-match-algorithm:
# 影子算法类型:列正则表达式匹配影子算法
type: COLUMN_REGEX_MATCH
# 影子算法属性配置
props:
operation: insert
column: create_by
regex: "[1]"
simple-note-algorithm:
# 影子算法类型:注解影子算法
type: SIMPLE_NOTE
props:
foo: bar
foo1: bar1
3、测试列正则表达式匹配影子算法
url请求接口
@GetMapping(value = "/add/{userId}")
public ResultVO add(@PathVariable("userId") String userId) {
SysLog sysLog = SysLog.builder()
.id(IdWorker.getIdStr())
.applicationName("sharding-sphere-server")
.logType(2)
.operateType(2)
.logContent("测试")
.ip("127.0.0.1")
.method("测试")
.requestUrl("测试")
.requestParam("测试")
.requestType("get")
.costTime(5L)
.createBy(userId)
.createTime(new Date())
.updateBy("1")
.updateTime(new Date())
.build();
sysLogService.save(sysLog);
return ResultVO.ok();
}
测试
控制台日志
mapper新增添加方法
/**
* 自定义新增:测试影子库(添加 SQL 注释 /*shadow:true,foo:bar,..*\/)
*
* @param sysLog 日志
* @return 成功数量
*/
int add(SysLog sysLog);
mapper.xml新增添加方法
<insert id="add">
INSERT INTO t_sys_log VALUE
(#{id}, 'sharding-sphere-server', 2, 2, '测试', '127.0.0.1', '测试', '测试', '测试', 'get',
5, '1', '2022-04-22 18:23:06.988', '1', '2022-04-22 18:23:06.988')/*foo:bar,foo1:bar1*/
insert>
server和serverImpl改造
/**
* 自定义新增:测试影子库(添加 SQL 注释 /*shadow:true,foo:bar,..*\/)
*
* @param sysLog 日志
* @return 成功数量
*/
void add(SysLog sysLog);
@Override
public void add(SysLog sysLog) {
sysLogMapper.add(sysLog);
}
url请求
@GetMapping(value = "/add1")
public ResultVO add1() {
SysLog sysLog = SysLog.builder()
.id(IdWorker.getIdStr())
.applicationName("sharding-sphere-server")
.logType(2)
.operateType(2)
.logContent("测试")
.ip("127.0.0.1")
.method("测试")
.requestUrl("测试")
.requestParam("测试")
.requestType("get")
.costTime(5L)
.createBy("123")
.createTime(new Date())
.updateBy("123")
.updateTime(new Date())
.build();
sysLogService.add(sysLog);
return ResultVO.ok();
}
测试
控制台日志
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)