通用导入客户端
一、简介
1.1 概述
通用导入客户端提供数据的通用导入功能,集成数据导入与数据校验接口
1.2 组件坐标
<dependency>
<groupId>org.hzero.boot</groupId>
<artifactId>hzero-boot-import</artifactId>
<version>${hzero.boot.version}</version>
</dependency>
1.3 功能特性
- 配合导入服务使用
二、使用说明
2.1 添加依赖
服务需要添加hzero-boot-import
依赖,启动服务后,可以在swagger-ui中看到如下API,则说明添加成功
2.2 数据导入流程
① 调用上述从excel导入临时表
接口,将excel数导入临时表,会返回一个批号
② 调用验证临时表数据
接口,验证excel数据
③ 调用从临时表导入正式表
接口,将上一步通过验证的数据导入正式表中
- 补充说明:
从临时表导入正式表
接口只会导入校验通过的数据,可以通过查询已上传数据
接口查询校验失败的数据,调用更新接口修改错误数据,再重复②③步
同步导入与异步导入
上述为异步导入相关接口,适用于数据量较大的导入场景。本客户端同时提供了同步导入的方法,仅适用于小数据量的导入
2.3 后台开发指导
2.3.1 建表
在当前服务的数据库中新建himp_data
、himp_import
、himp_local_template
表,用于存储临时数据。
本客户端自带建表脚本开启配置即可在服务启动时自动创建相关表
hzero:
import:
init-table: true
2.3.2 自定义导入逻辑
开发人员必须自定义导入逻辑,实现接口org.hzero.boot.imported.app.service.IDoImportService
,重写doImport方法。
类加注解@org.hzero.boot.imported.infra.validator.annotation.ImportService
,声明模板编码
@ImportService(templateCode = "TEST")
public class ImportServiceImpl implements IDoImportService {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private DemoRepository repository;
@Override
public Boolean doImport(String data) {
// 获取自定义参数
Map<String, Object> args = getArgs();
User user = null;
try {
user = objectMapper.readValue(data, User.class);
} catch (IOException e) {
// 失败
return false;
}
repository.insertSelective(user);
// 成功
return true;
}
}
调用从临时表导入正式表
接口会遍历数据执行此方法。
上述为数据逐条导入,数据批量导入可实现org.hzero.boot.imported.app.service.IBatchImportService
,重写doImport方法。
类加注解@org.hzero.boot.imported.infra.validator.annotation.ImportService
,声明模板编码
@ImportService(templateCode = "TEST")
public class ImportServiceImpl implements IBatchImportService {
@Override
public Boolean doImport(List<String> data) {
// 获取自定义参数
Map<String, Object> args = getArgs();
// do import
return true;
}
@Override
public int getSize(){
return 500;
}
}
批量导入时,每次读取的数据量由getSize()
方法控制,默认返回0,即不分批,一次获取所有数据
**注意:**若相同模板编码同时存在IDoImportService
和IBatchImportService
的不同实现,只会执行IBatchImportService
的doImport
方法
2.3.3 自定义校验逻辑
开发人员如果需要自定义校验逻辑,比如数据的唯一性校验等,可以自定义类继承com.baidu.unbiz.fluentvalidator.ValidatorHandler``,重写validate方法。类需要加注解
@org.hzero.boot.imported.infra.validator.annotation.ImportValidators`,声明模板编码,可以一次声明多个模板编码,都会走当前实现类
@ImportValidators({
@ImportValidator(templateCode = "TEST")
})
public class ImportValidatorTest extends ValidatorHandler<String> {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private CapacityConfigRepository capacityConfigRepository;
@Override
public boolean validate(ValidatorContext context, String data) {
// 获取自定义参数
Map args = context.getAttribute(HimpBootConstants.ARGS, Map.class);
// do something
return true;
}
}
调用验证临时表数据
接口会遍历数据执行此方法,需要注意的是,自定义校验不会受到导入服务中定义的数据验证
字段的影响
三、版本更新日志
版本 0.7.0.RELEASE [2018-11-29]
- 数据导入基础功能
版本 0.10.0.RELEASE [2019-06-23]
- 添加同步导入功能
- 添加导入过程自定义参数