Azkaban通过API动态传递参数

本文介绍如何在Azkaban中使用API动态传递参数给Java进程作业。通过指定flowOverride参数,可以实现对job中main.args的动态赋值,确保作业能够根据不同的需求运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

目前有一个普通的java process作业,
java 内容如下:

public class GenerateShell {
    public static void main(String[] args) throws FileNotFoundException {

        System.out.println("参数为:" + args[0]);
        System.exit(0);
   }
}

job如下:

type=javaprocess
Xms=1024M
Xmx=2048M
java.class=shell.GenerateShell
classpath=./utils-1.0-SNAPSHOT-jar-with-dependencies.jar
task=${param.mytask}
main.args=${task}

这个job的类型是javaprocess
程序入口是shell.GenerateShell
执行这个程序需要一个参数,这个参数需要动态的进行获取。

解决方式

在使用azkaban API的过程中指定参数flowOverride[param.mytask],通过这种方式可以动态传递给job中的main.agrs,内容如下:

    public JSONObject executeFlow(String sessionID, String project, String flow, String task) {
        String url = URL + "/executor?ajax=executeFlow";
        HttpHeaders httpHeaders = new HttpHeaders();
        LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>();
        linkedMultiValueMap.add("session.id", sessionID);
        linkedMultiValueMap.add("project", project);
        linkedMultiValueMap.add("flow", flow);
        linkedMultiValueMap.add("flowOverride[param.mytask]", task);
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(linkedMultiValueMap, httpHeaders);
        ResponseEntity<String> result = restTemplate.postForEntity(url, httpEntity, String.class);
        return JSONObject.parseObject(result.getBody());
    }

当然需要首先获取到sessionID。
在这里插入图片描述
注意:参数使用双引号括起来,否则在传递参数时会被空格分隔开。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值