【背景说明】
IDEA中执行一个程序时,如何就在程序一开始执行给传入你给的参数呢?
【说明】
public static void main(String[] args) throws Exception {}
说明:其实java中main方法里的args这个参数,就是用于接收外部传参的。
【解析传参的代码】
public class OutParamSocketStreamWordCount {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//方式一:通过位置,解析args参数
// String host = args[0];
// int port = Integer.parseInt(args[1]);
//方式二:通过flink中自带的ParameterTool工具类,进行参数名解析
ParameterTool parameterTool = ParameterTool.fromArgs(args);
String host = parameterTool.get("host");
int port = parameterTool.getInt("port");
DataStreamSource<String> socketDS = env.socketTextStream(host, port);
SingleOutputStreamOperator<WordCount> sum = socketDS.flatMap(new FlatMapFunction<String, WordCount>() {
@Override
public void flatMap(String value, Collector<WordCount> out) throws Exception {
String[] words = value.split(" ");
for (String word : words) {
out.collect(new WordCount(word, 1));
}
}
}).keyBy(new KeySelector<WordCount, String>() {
@Override
public String getKey(WordCount value) throws Exception {
return value.getWord();
}
}).sum("count");
sum.print();
env.execute();
}
}
通过上述两种方式实现外部传参(1.解析位置,2.解析参数名)
此时参数名在代码中已经写完了,但现在直接运行会报错,因为你还没有给其传参。
这样参数就传递完成了,再次运行!
成功