ml-gradle执行时如何不通过命令行向CORB模块传递参数
ml-gradle 无需命令行传参向CORB模块传值的方案
存在可完全脱离命令行-D参数传值的方案,你可以通过CorbTask内置的processModuleParams属性配置参数,非常适配多任务复用、动态传参的场景。
场景1:复用同一CorbTask模板,不同调用场景传不同参数
先定义公共的基础CorbTask,公共配置统一维护:
// 基础CORB任务模板,仅配置通用固定参数 task baseCorbTask(type: com.marklogic.gradle.task.CorbTask) { urisModule = "src/main/ml-modules/root/corb/common-uris.xqy" processModule = "src/main/ml-modules/root/corb/batch-process.xqy" threadCount = 10 batchSize = 100 }
其他业务任务调用时,动态配置参数后执行即可:
// 调用场景A:数据归档 task archiveOldData { doLast { tasks.baseCorbTask.configure { processModuleParams = [ opType: "archive", targetCollection: "archived_records", retainThreshold: "2022-01-01" ] } tasks.baseCorbTask.execute() } } // 调用场景B:数据清洗 task cleanInvalidData { doLast { tasks.baseCorbTask.configure { processModuleParams = [ opType: "clean", fixInvalidField: true, deleteInvalidRecord: false ] } tasks.baseCorbTask.execute() } }
场景2:直接定义多套独立配置的CorbTask
如果不需要复用模板,也可以直接为每个业务场景定义独立的CorbTask,参数直接写在任务配置中:
// 数据迁移专用CORB任务 task dataMigrateCorb(type: com.marklogic.gradle.task.CorbTask) { urisModule = "src/main/ml-modules/root/corb/migrate-uris.xqy" processModule = "src/main/ml-modules/root/corb/migrate-process.xqy" threadCount = 8 processModuleParams = [ sourceDb: "legacy-db", targetDb: "new-business-db", migrateAttachments: true ] } // 过期数据删除专用CORB任务 task expiredDataDeleteCorb(type: com.marklogic.gradle.task.CorbTask) { urisModule = "src/main/ml-modules/root/corb/expired-uris.xqy" processModule = "src/main/ml-modules/root/corb/delete-process.xqy" threadCount = 4 processModuleParams = [ expiredDays: 365, backupBeforeDelete: true ] }
补充说明
- 配置的
processModuleParams参数会自动注入到处理模块的外部变量中,无需额外的参数解析逻辑 - 如果你需要给URIS模块也传递参数,使用
urisModuleParams属性即可,用法和processModuleParams完全一致
内容的提问来源于stack exchange,提问作者TJ Tang
相关产品推荐
相关产品推荐

