存储命令行参数的标准方法是什么,以便在需要时可以访问它?
我可以看到两种情况:
使用方案1预先配置它似乎很自然,但是当它是场景2中的场景时,我更愿意在必要时配置该组件(IE不在前面)
因此,为了使问题略有不同,如何使我的整个应用程序可以使用我的配置选项?
答案 0 :(得分:2)
您可以拥有一个单独的Configuration
对象,其中存储了所有相关内容。
public class Configuration {
private static final Configuration conf = new Configuration();
public static Configuration get() {
return conf;
}
private String failureEmailAddress;
public String getFailureEmailAddress() {
return failureEmailAddress;
}
public void parseCommandLine(String[] args) {
// ...
}
}
答案 1 :(得分:1)
您可以使用类似的东西(您可以在某处存储命令行或立即使用选项):
Options options = createOptions();
CommandLineParser parser = new GnuParser();
CommandLine cmdLine;
int timeoutHumanMove;
try
{
cmdLine = parser.parse(options, args, true);
timeoutHumanMove = getTimeoutOption(cmdLine, "thm", 300);
}
catch(ParseException e)
{
return;
}
private static int getTimeoutOption(CommandLine cmdLine, String opt, int defaultSeconds)
throws ParseException
{
if(cmdLine.hasOption(opt))
{
Number val = (Number)cmdLine.getParsedOptionValue(opt);
return (int)(val.doubleValue() * 1000D);
} else
{
return 1000 * defaultSeconds;
}
}
private static Options createOptions()
{
Options options = new Options();
options.addOption(OptionBuilder.withDescription("print this help and exit").create(OptionBuilder.withLongOpt("help"), 104));
// ...
return options;
}
答案 2 :(得分:0)
没有标准的方法来存储您描述的应用程序范围的配置信息。但是,大多数情况下,您将它存储在特定于作业的类(ApplicationContext)中,然后将实例作为参数或构造函数或类似的东西传递给其他类。我通常使ApplicationContext不可变。
我遇到的一些应用程序使用静态全局上下文,实际上是一个全局变量。这不一定是个好主意,因为你应该避免使用全局变量。
但是,我会说你应该总是先验证命令行选项是否有效。您不希望进行3个小时的处理,然后发现有人没有在命令行上正确配置电子邮件地址。这应该是一个快速失败的情况。
答案 3 :(得分:-1)
您可以使用System.setProperty()将命令args存储到系统属性中,然后可以通过System.getProperty()在任何地方访问您的属性。