Skip to content

Latest commit

 

History

History
80 lines (54 loc) · 5.07 KB

导出样例及文档说明.md

File metadata and controls

80 lines (54 loc) · 5.07 KB

导出

前期准备

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

基本过程

第1步,实现导出Processor

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

  1. 实现ExportProcessor接口,并使用上文定义POJO Query、Data、View作为接口的泛型参数
  2. 实现ExportProcessor接口的TotalCount方法,根据Query返回当前导出的总条数(比如根据Query构造Select Count SQL,并返回Count值)
  3. 实现ExportProcessor接口的queryData方法,根据Query返回当前分页的实际数据(比如根据Query构造Select ... limit n,m SQL,并返回数据行),如果TotalCount有10000,分片大小默认为1000,则queryData方法会被并行调用10次,入参BizExportPage会携带不同分页信息。
  4. 实现ExportProcessor接口的convert方法,根据页面展示规则,把queryData返回的Data列表转为View列表。View列表会最终输出给用户。

第2步,注册第1步实现的导出Processor

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

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

此步骤实际生产环境中一般由API触发,用户在页面点击触发执行导出任务

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

第4步,查询任务进度,下载导出文件,见assertWithFile方法

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

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

  1. 创建进度查询请求参数GetTaskProgressParam,其中MainTaskId为上文创建任务返回的任务ID
  2. 调用本地方法,查询任务进度。用户可根据自身技术线路封装远程调用接口。processor包中也包含了可远程执行任务的HTTP API,详情见:API参考文档。
  3. 轮询任务进度,直至任务完成或出错
  4. 任务完成后,查询任务实例信息,任务输出的文件信息
  5. 下载文件到本地
  6. 断言判断产生的文件是否符合期望

单机导出

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

多机导出

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

CSV文件出

默认情况下为excel导出,可通过配置导出csv文件

方式一:注解中添加fileType="csv",参考代码:com.alibaba.ageiport.test.processor.core.export.CSVExportProcessor

@ExportSpecification(code = "CSVExportProcessor", name = "CSVExportProcessor", fileType = "csv")

方式二::通过实现接口com.alibaba.ageiport.processor.core.task.importer.ImportProcessor#taskRuntimeConfig返回FileType的值为" csv",可动态设置执行方式,此方式优先级比方式一高

    public BizExportTaskRuntimeConfig taskRuntimeConfig(BizUser user, Query query) throws BizException {
        final BizExportTaskRuntimeConfigImpl runtimeConfig = new BizExportTaskRuntimeConfigImpl();
        runtimeConfig.setExecuteType("STANDALONE");
        runtimeConfig.setFileType("csv");
        return runtimeConfig;
    }