2016-06-07 10 views
1

Ich habe diesen benutzerdefinierten Befehl:Benutzerdefinierte Befehl mit Server yml Befehl in 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 
    } 
} 

... in der Anwendung wie folgt festgelegt:

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

... und von der Kommando- ausgeführt Zeile wie folgt:

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

ich würde lik e, dies zu tun (nicht funktioniert):

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

Muss ich jetzt einen benutzerdefinierten Befehl Argument die .yml-Datei übergeben und zu handhaben?

Antwort

0

Ok so einen anderen Ansatz, das war einfacher als ich dachte -

1) - Paare benutzerdefinierte Schlüssel/Wert-In der .yml Konfigurationsdatei:

foobar: asdf 
baz: 123 

2) - die benutzerdefinierten Tasten in FoobarBazConfiguration.java registrieren:

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 Rieve die Werte aus dem Konfigurationsobjekt in FoobarBazApplication.java:

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

4) - Führen Sie die Anwendung aus der Befehlszeile wie gewohnt:

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

ich nicht noch tun wissen, wie man eine Unterklasse von Command mit server <.yml file> obwohl.

0

Wenn Sie verschachtelte Schlüssel/Wert-Paare in der .yml-Datei verwenden möchten, können Sie ein Map<String, String> verwenden:

1) - Fügen Sie benutzerdefinierte Schlüssel/Wert-Paare in die .yml Konfigurationsdatei :

args: 
    foobar: asdf 
    baz: 123 

2) - auf der Karte in FoobarBazConfiguration.java registrieren:

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) - Rufen Sie die Werte von Ihrem Konfigurationsobjekt in FoobarBazApplication.java ab: