Сделать параметры доступными в приложении - PullRequest
1 голос
/ 02 октября 2011

Каков стандартный способ хранения аргумента командной строки, чтобы к нему можно было обращаться при необходимости?

Я вижу 2 сценария:

  1. Аргумент используется немедленно (Уровень ведения журнала)
  2. Аргумент не нужен немедленно (при ошибке отправьте электронное письмо на адрес X )

При сценарии 1 Настройка, казалось бы, вполне естественнаэто заранее, однако, когда это сценарий в большей степени в духе сценария 2, я бы предпочел настроить этот компонент по мере необходимости (IE не заранее)

Так что сформулировать вопрос немного иначе, как мне сделатьмои параметры конфигурации доступны для всего моего приложения?

Ответы [ 4 ]

2 голосов
/ 02 октября 2011

У вас может быть одноэлементный 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 голос
/ 02 октября 2011

Вы можете использовать что-то подобное (вы можете хранить CommandLine где-то или использовать опционы сразу):

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;
}
0 голосов
/ 03 октября 2011

Вы можете сохранить свои командные аргументы в свойствах системы, используя System.setProperty (), затем вы можете получить доступ к своим свойствам в любом месте через System.getProperty () ..

0 голосов
/ 02 октября 2011

Не существует стандартного способа хранения информации о конфигурации приложения, такой как вы описали. Однако большую часть времени вы сохраняете его в классе, специфичном для задания (ApplicationContext), а затем экземпляр передается в другие классы в качестве параметров или в конструкторе или что-то в этом роде. Я обычно делаю ApplicationContext неизменным.

Некоторые приложения, с которыми я сталкивался, используют статический глобальный контекст, фактически глобальную переменную. Это не обязательно хорошая идея, по той же причине, по которой вам следует избегать глобальных переменных.

Однако я бы сказал, что вы всегда должны проверять, что параметры командной строки действительны заранее. Вы не хотите выполнять 3 часа обработки, а затем узнаете, что кто-то неправильно настроил адрес электронной почты в командной строке. Это должна быть безотказная ситуация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...