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:点击【新增配置】按钮
执行如下代码:
代码说明:
-
往前台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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!