Skip to content

Latest commit

 

History

History
72 lines (46 loc) · 5.01 KB

导入样例及文档说明.md

File metadata and controls

72 lines (46 loc) · 5.01 KB

导出

下述文档中的类和代码均可在ageiport-test模块中搜索获得,未避免文档和代码不一致,文档中只描述重点接口

前期准备

定义几个导入导出用到的POJO分别对应QUERY/VIEW/DATA三个泛型

参考代码: com.alibaba.ageiport.test.processor.core.model

基本过程

第1步,准备导入文件

此步骤在生产环境中不需要,一般导入的文件由用户通过Web页面上传

  1. 项目目录的resources文件夹下创建import-xlsx文件夹
  2. 在import-xlsx文件夹创建StandaloneImportProcessor.xlsx文件,包含两列编码、姓名(与View中的字段对应)
  3. 在StandaloneImportProcessor.xlsx文件添加一些数据

第2步,实现导入Processor

参考代码:com.alibaba.ageiport.test.processor.core.importer.StandaloneImportProcessor

  1. 实现ImportProcessor接口,并使用上文定义POJO Query、Data、View作为接口的泛型参数
  2. 实现ImportProcessor接口的convertAndCheck方法,此方法负责检查导入的数据,文件中的View对象转为Data对象。返回值BizImportResult<View, Data>,当无错误数据时BizImportResult只设置View即可,若有错误数据则需设置View,View最终会被写到文件中输出给用户。
  3. 实现ExportProcessor接口的write方法,此方法负责执行写入业务逻辑。返回值BizImportResult<View, Data> ,当无错误数据时BizImportResult只设置View即可,若有错误数据则需设置View,View最终会被写到文件中输出给用户。

第3步,注册第1步实现的导入Processor

  1. 项目目录的resources文件夹下创建META-INF文件夹
  2. META-INF文件夹下创建名为com.alibaba.ageiport.processor.core.Processor的文本文件
  3. 添加一行配置记录:StandaloneImportProcessor=com.alibaba.ageiport.test.processor.core.importer.StandaloneImportProcessor,其中等号左侧为ImportSpecification中的code,等号右侧为导出实现类的全类名

第4步,运行单元测试,执行任务

此步骤实际生产环境中一般由API触发,是用户从页面点击导入按钮上传文件触发的。

  1. 初始化AgeiPort实例,在单测中为了尽可能少的依赖外部组件,我们使用AgeiPortOptions.Debug()测试配置来初始化AgeiPort实例。若为生产环境,AgeiPort实例应被维护到应用的上下文中,比如在Spring的Configuration中初始化AgeiPort并作为一个bean存储在Spring上下文中。
  2. 读取文件并将文件上传到文件存储中,获取文件的Key。
  3. 构造查询参数TaskExecuteParam,必须传入:TaskSpecificationCode,标识某一个任务;BizUserId标识当前任务的触发人;InputFileKey为第2步中获取到的文件Key;上文定义的Query对象需要以JSON的格式传入。
  4. 调用本地方法executeTask,开始执行任务,并获取任务实例ID。用户可根据自身技术线路封装远程调用接口。processor包中也包含了可远程执行任务的HTTP API,详情见:API参考文档。
  5. 使用内部封装的TaskHelp方法判断任务是否执行成功,TestHelp类主要是封装了一些判断任务执行状态的断言
  • 调用本地接口创建任务参考代码:com.alibaba.ageiport.test.processor.core.exporter.StandaloneImportProcessor
  • 调用HTTP接口创建任务参考代码:com.alibaba.ageiport.test.processor.core.api.HttpApiTest

第5步,查询任务进度,下载导出文件

此步骤生产环境中一般由API触发,在用户触发任务后,页面自动轮询任务进度,最终将生成的文件返回给用户,详见API参考文档。

可参照TestHelper类的assertWithFile方法,代码在:com.alibaba.ageiport.test.processor.core.TestHelper#assertWithFile

  1. 创建进度查询请求参数GetTaskProgressParam,其中MainTaskId为上文创建任务返回的任务ID
  2. 调用本地方法,查询任务进度。用户可根据自身技术线路封装远程调用接口。processor包中也包含了可远程执行任务的HTTP API,详情见:API参考文档。
  3. 轮询任务进度,直至任务完成或出错
  4. 若convertAndCheck和write方法返回的BizImportResult包含View,View数据会被写入到输出文件中
  5. 若导入有错误数据文件输出,下载文件到本地
  6. 若已下载错误文件,断言判断错误文件中的数据是否符合预期

单机导入

方式一:ImportSpecification注解中通过executeType属性指定,默认值为"STANDALONE"即为单机执行 方式二:通过实现接口com.alibaba.ageiport.processor.core.task.importer.ImportProcessor#taskRuntimeConfig返回ExecuteType的值为" STANDALONE",可动态设置执行方式,此方式优先级比方式一高

多机导入

方式一:ImportSpecification注解中通过executeType属性指定,设置为"CLUSTER"即为多机执行 方式二:通过实现接口com.alibaba.ageiport.processor.core.task.importer.ImportProcessor#taskRuntimeConfig返回ExecuteType的值为" CLUSTER",可动态设置执行方式,此方式优先级比方式一高