需求
目前有一个普通的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。
注意:参数使用双引号括起来,否则在传递参数时会被空格分隔开。