2016-06-07 2 views
1

У меня есть этот обычай Команда:Пользовательские команды с помощью команды сервера YML в Dropwizard

public final class ArgsCommand extends Command { 

    private String foobar; 

    private String baz; 

    public ArgsCommand() { 
     super("args", "sets additional application arguments"); 
    } 

    public String getFoobar() { 
     return foobar; 
    } 

    public String getBaz() { 
     return baz; 
    } 

    @Override 
    public void configure(Subparser subparser) { 
     subparser.addArgument("-foobar") 
       .dest("foobar") 
       .type(String.class) 
       .required(true) 
       .help("the foobar value for the application"); 

     subparser.addArgument("-baz") 
       .dest("baz") 
       .type(String.class) 
       .required(true) 
       .help("the baz value for the application"); 
    } 

    @Override 
    public void run(Bootstrap<?> bootstrap, Namespace namespace) throws Exception { 
     foobar = namespace.getString("foobar"); 
     baz = namespace.getString("baz"); 

     if (foobar == null || foobar.length() == 0 
       || baz == null || baz.length() == 0) { 
      throw new IllegalArgumentException(
       "One or more required command-line arguments is missing!"); 
     } 

     // do something with the additional arguments 
    } 
} 

... установить в Заявке следующим образом:

@Override 
public void initialize(final Bootstrap<FoobarBazConfiguration> bootstrap) { 
    bootstrap.addCommand(new ArgsCommand()); 
} 

... и выполнен из Command- линии следующим образом:

java -jar <jar file> args -foobar asdf -baz 123 

Я бы лик е, чтобы сделать это (не работает):

java -jar <jar file> server <yml file> args -foobar asdf -baz 123 

ли я теперь нужен аргумент команды пользовательского передать и обработать .yml файл?

ответ

0

ИТАК принимая иной подход, это было проще, чем я думал, -

1) - Добавление пользовательских пар ключ/значение в .yml конфигурационном файле:

foobar: asdf 
baz: 123 

2) - Регистрация пользовательских ключей в FoobarBazConfiguration.java:

import io.dropwizard.Configuration; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import org.hibernate.validator.constraints.NotEmpty; 

public final class FoobarBazConfiguration extends Configuration { 

    @NotEmpty 
    private String foobar; 

    @NotEmpty 
    private String baz; 

    @JsonProperty("foobar") 
    public String getFoobar() { 
     return foobar; 
    } 

    @JsonProperty("foobar") 
    public void setFoobar(String foobar) { 
     this.foobar = foobar; 
    } 

    @JsonProperty("baz") 
    public String getBaz() { 
     return baz; 
    } 

    @JsonProperty("baz") 
    public void setBaz(String baz) { 
     this.baz = baz; 
    } 
} 

3) - Ret Рив значения из вашего объекта конфигурации в FoobarBazApplication.java:

System.out.println(configuration.getFoobar()); 
System.out.println(configuration.getBaz()); 

4) - Запуск приложения из командной строки, как обычно:

java -jar <jar file> server <yml file> 

Я до сих пор не но знаете, как использовать подкласс Command с server <.yml file>.

0

Если вы хотите использовать вложенные пары ключ/значение в .yml файла, вы можете использовать Map<String, String>:

1) - Добавление пользовательских пар ключ/значение в файл конфигурации .yml :

args: 
    foobar: asdf 
    baz: 123 

2) - Зарегистрируйте карту в FoobarBazConfiguration.java:

import io.dropwizard.Configuration; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import org.hibernate.validator.constraints.NotEmpty; 

public final class FoobarBazConfiguration extends Configuration { 

    @NotEmpty 
    private Map<String, String> args; 

    @JsonProperty("args") 
    public Map<String, String> getArgs() { 
     return args; 
    } 

    @JsonProperty("args") 
    public void setArgs(Map<String, String> args) { 
     this.args = args; 
    } 

    @JsonIgnore 
    public String getFoobar() { 
     return args.get("foobar"); 
    } 

    @JsonIgnore 
    public String getBaz() { 
     return args.get("baz"); 
    } 
} 

3). Извлеките значения из вашего объекта конфигурации в FoobarBazApplication.java:

System.out.println(configuration.getFoobar()); 
System.out.println(configuration.getBaz()); 
Смежные вопросы