Jvm-Sandbox-Repeater 新增配置详解

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

Step1:配置表结构信息

1 CREATE TABLE `module_config` (
2   `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
3   `gmt_create` DATETIME NOT NULL COMMENT '创建时间',
4   `gmt_modified` DATETIME NOT NULL COMMENT '录制时间',
5   `app_name` VARCHAR(255) NOT NULL COMMENT '应用名',
6   `environment` VARCHAR(255) NOT NULL COMMENT '环境信息',
7   `config` LONGTEXT NOT NULL COMMENT '配置信息',
8   PRIMARY KEY (`id`)
9 ) 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页面传数据

model.addAttribute("config", JacksonUtil.serialize(defaultConf));

  2.HTML内容

   3.代码里面都是一些写死的默认配置信息

Web页面展示如下:

Step5:点击【保存】按钮

1.首先请求到这里:

 

 2.其次调用:

 3.最后调用到实现类:

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

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

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

Step6:查询数据库

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

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


添加关注,让我们一起共同成长!

原文地址:https://www.cnblogs.com/Wu13241454771/p/15438768.html