定义几个导入导出用到的POJO分别对应QUERY/VIEW/DATA三个泛型
第1步,实现导出Processor
参考代码:com.alibaba.ageiport.test.processor.core.exporter.ExcelStyleExportProcessor
- 实现ExportProcessor接口,并使用上文定义POJO Query、Data、View作为接口的泛型参数
- 实现ExportProcessor接口的TotalCount方法,根据Query返回当前导出的总条数(比如根据Query构造Select Count SQL,并返回Count值)
- 实现ExportProcessor接口的queryData方法,根据Query返回当前分页的实际数据(比如根据Query构造Select ... limit n,m SQL,并返回数据行),如果TotalCount有10000,分片大小默认为1000,则queryData方法会被并行调用10次,入参BizExportPage会携带不同分页信息。
- 实现ExportProcessor接口的convert方法,根据页面展示规则,把queryData返回的Data列表转为View列表。View列表会最终输出给用户。
第2步,注册第1步实现的导出Processor
- 项目目录的resources文件夹下创建META-INF文件夹
- META-INF文件夹下创建名为com.alibaba.ageiport.processor.core.Processor的文本文件
- 添加一行配置记录:StandaloneExportProcessor=com.alibaba.ageiport.test.processor.core.exporter.StandaloneExportProcessor,其中等号左侧为ExportSpecification中的code,等号右侧为导出实现类的全类名
第3步,运行单元测试,执行任务
此步骤实际生产环境中一般由API触发,用户在页面点击触发执行导出任务
- 初始化AgeiPort实例,在单测中为了尽可能少的依赖外部组件,我们使用AgeiPortOptions.Debug()测试配置来初始化AgeiPort实例。若为生产环境,AgeiPort实例应被维护到应用的上下文中,比如在Spring的Configuration中初始化AgeiPort并作为一个bean存储在Spring上下文中。
- 构造查询参数TaskExecuteParam,必须传入:TaskSpecificationCode,标识某一个任务);BizUserId标识当前任务的触发人,上文定义的Query对象需要以JSON的格式传入。
- 调用本地方法executeTask,开始执行任务,并获取任务实例ID。用户可根据自身技术线路封装远程调用接口。processor包中也包含了可远程执行任务的HTTP API,详情见:API参考文档。
- 使用内部封装的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
- 创建进度查询请求参数GetTaskProgressParam,其中MainTaskId为上文创建任务返回的任务ID
- 调用本地方法,查询任务进度。用户可根据自身技术线路封装远程调用接口。processor包中也包含了可远程执行任务的HTTP API,详情见:API参考文档。
- 轮询任务进度,直至任务完成或出错
- 任务完成后,查询任务实例信息,任务输出的文件信息
- 下载文件到本地
- 断言判断产生的文件是否符合期望
方式一: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",可动态设置执行方式,此方式优先级比方式一高
默认情况下为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;
}