之前的文章中介紹了如何通過加載包外部配置檔案來擷取參數。
本文則是另一個場景,不加載檔案,而是從指令行擷取所有的參數,因為數量較多,是以将有關内容放在啟動腳本中。
在項目下建立bin目錄,在bin目錄下建立start_test.sh。内容格式如下:
param1="parameter1"
param2="parameter2"
command="
--param1=${param1} \
--param2=${param2}
"
java_opts=" -Xmx20g -Xms20g -Xmn16g -Xss500k"
java -cp ../xxx.jar \
xxx.MainClassName \
$command
建立參數讀入工具類如下,核心是parseOptions(),這個方法的作用主要包括:
- 建立option和類成員的映射關系(也就是指令行參數被映射程序式)
- 檢查必填
- 預設值設定
import org.apache.commons.cli.*;
import java.util.ArrayList;
import java.util.List;
public class xxxParameterUtils {
CommandLine cmdLine =null;
List<Options> requiredOpts = new ArrayLias<>();
int param_eter_num = 0;
public static fianl Option PARAM_ETER_NUM_OPTION =
new Option("p_num","parameter_num", ture, "參數");
//短opt,長opt,是否有參數,description
public static final Option HELP_OPTION = new Option("h","help",false,"Help");
public xxxParameterUtils() {
//requiredOpts.add(); //添加必選參數
}
public Options getOptions() { //往options中加入所有option
final Options options = new Options();
options.addOption(PARAM_ETER_NUM_OPTION);
return options;
}
public CommandLine parseOptions(String[] args) {
final Options = getOptions();
CommandLineParser parser = new DefaultParser();
try {
cmdLine = parser.parse(options, args);
} catch (ParseException e) {
//your handling
}
if(cmdLine.hasOption(HELP_OPTION.getOpt())) {
printHelpAndExit(options, 0);
}
for(Option opt : requiredOpts) {
if(!cmdLine.hasOption(opt.getOpt())) {
printHelpAndExit(options, 0);
}
}
this.param_meter_num = cmdLine.hasOption(PARAM_METER_NUM_OPTION.getOpt()) ?
Integer.valueOf(cmdLine.getOptionValue(PARAM_METER_NUM_OPTION.getOpt())) : 0;
return cmdLine;
}
@Override
public String toString() {
return "xxxParamUtils{" + "param_meter_num=" + param_meter_num +'}'
}
public void printHelpAndExit(Options options, int exitCode) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("help","",options,"腳注");
System.exit(exitCode);
}
}