首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jvm-Sandbox-Repeater 新增配置详解

Jvm-Sandbox-Repeater 新增配置详解

作者头像
Wu_Candy
发布2022-07-04 21:32:53
发布2022-07-04 21:32:53
1.1K00
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行

今日主题:Jvm-Sandbox-Repeater 这个流量录制回放工具里面的 Console 模块里面的新增配置是如何实现的。

Step1:配置表结构信息

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE `module_config` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `gmt_create` DATETIME NOT NULL COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL COMMENT '录制时间',
  `app_name` VARCHAR(255) NOT NULL COMMENT '应用名',
  `environment` VARCHAR(255) NOT NULL COMMENT '环境信息',
  `config` LONGTEXT NOT NULL COMMENT '配置信息',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='模块配置信息';

Step2:配置表结构对应的实体类

基于step1 & step2的代码逻辑,我们再来看看一些概念定义:

1. JPA(Java Persistence API)

是 Java 标准中的一套 ORM 规范,借助 JPA 技术可以通过注解或者 XML 描述(对象-关系表)之间的映射关系,并将实体对象持久化到数据库中(即Object Model 与 Data Model 间的映射)。

2. Spring Data JPA

是 Spring 提供的一套简化 JPA 开发的框架(Criteria API还是太复杂了),按照约定好的方法命名规则写 dao 层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

3. @Entity、@Table、@Column 、@Id、@GeneratedValue

Step2中的代码,通过 JPA 定义的 Object 时使用到了@Entity、@Table、@Column 、@Id、@GeneratedValue 等注解。

解释分别如下:

@Entity:标注用于实体类声明语句之前,指出该 Java 类为实体类,将映射到指定的关系数据库表。

@Table:当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用(name属性:指定表名,不知道时表名为类名)

@Id: 标注用于声明一个实体类的属性映射为数据库的一个主键列

@GeneratedValue: 用于标注主键的生成策略,通过 strategy 属性指定。

@Column:此注解不是必须的,无此字段也会将字段映射到表列。当实体的属性与其映射的数据库表的列不同名时需要使用 @Column 标注说明(类的字段名在数据库中对应的字段名可以通过此注解的 name 属性指定)。

Step3:interface 定义

备注:@Repository 用来表示一个持久层 bean,即数据访问层DAO组件。所以findByAppNameAndEnvironment() 这个方法不用写它的实现类去 @Override 这个方法,就可以直接拿来使用,下文中有调用到它的地方。

Step4:点击【新增配置】按钮

执行如下代码:

代码说明:

  1. 往前台web页面传数据
代码语言:javascript
代码运行次数:0
运行
复制
model.addAttribute("config", JacksonUtil.serialize(defaultConf));
  1. HTML内容
  1. 代码里面都是一些写死的默认配置信息

Web页面展示如下:

Step5:点击【保存】按钮

1.首先请求到这里:

2.其次调用:

3.最后调用到实现类:

moduleConfigDao.query(params) 调用到了 Step3 中接口定义的方法:

接下来判断是否在表里面查找到了相应的配置,如果不为 null 就重新赋值,如果为 null 就重新实例化 ModuleConfig 类实例,最后进行调 saveOrUpdate() 方法进行保存入库。

最终调用到了saveAndFlush()方法,这是框架自带的方法:(源码如下)

Step6:查询数据库

备注:app_name and environment 这里在提交时填写的是 unknown,这是为了让 repeater-client 来 pull config 数据时能够匹配得上而做的相应设置。

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档