Yaml Dropwizard中带有服务器yml命令的自定义命令

Yaml Dropwizard中带有服务器yml命令的自定义命令,yaml,dropwizard,Yaml,Dropwizard,我有一个自定义命令: public final class ArgsCommand extends Command { private String foobar; private String baz; public ArgsCommand() { super("args", "sets additional application arguments"); } public String getFoobar() {

我有一个自定义命令:

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
    }
}
public final类ArgsCommand extends命令{
私人字符串foobar;
私有字符串baz;
公共ArgsCommand(){
超级(“args”,“设置附加应用程序参数”);
}
公共字符串getFoobar(){
返回foobar;
}
公共字符串getBaz(){
返回baz;
}
@凌驾
公共void配置(子parser子parser){
subparser.addArgument(“-foobar”)
.dest(“foobar”)
.type(String.class)
。必需(正确)
.help(“应用程序的foobar值”);
subparser.addArgument(“-baz”)
.dest(“baz”)
.type(String.class)
。必需(正确)
.help(“应用程序的baz值”);
}
@凌驾
公共void运行(引导引导、命名空间)引发异常{
foobar=namespace.getString(“foobar”);
baz=namespace.getString(“baz”);
如果(foobar==null | | foobar.length()==0
||baz==null | | baz.length()==0){
抛出新的IllegalArgumentException(
“缺少一个或多个必需的命令行参数!”);
}
//对附加参数做些什么
}
}
…在应用程序中设置如下:

@Override
public void initialize(final Bootstrap<FoobarBazConfiguration> bootstrap) {
    bootstrap.addCommand(new ArgsCommand());
}
java -jar <jar file> args -foobar asdf -baz 123
@覆盖
公共无效初始化(最终引导引导引导){
addCommand(新的ArgsCommand());
}
…并从命令行执行,如下所示:

@Override
public void initialize(final Bootstrap<FoobarBazConfiguration> bootstrap) {
    bootstrap.addCommand(new ArgsCommand());
}
java -jar <jar file> args -foobar asdf -baz 123
java-jar args-foobar asdf-baz 123

我想这样做(不工作):

java-jar服务器args-foobar asdf-baz 123

我现在是否需要一个自定义命令参数来传递和处理.yml文件?

好的,因此采用不同的方法,这比我想象的要容易--

1) --将自定义键/值对添加到.yml配置文件:

foobar: asdf
baz: 123
args:
  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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
3) --从FoobarbazaApplication.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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
4) --按常规从命令行运行应用程序:

java -jar <jar file> server <yml file>
java-jar服务器


不过,我仍然不知道如何将
命令的子类
服务器
一起使用。

好的,所以采用不同的方法,这比我想象的要容易--

1) --将自定义键/值对添加到.yml配置文件:

foobar: asdf
baz: 123
args:
  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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
3) --从FoobarbazaApplication.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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
4) --按常规从命令行运行应用程序:

java -jar <jar file> server <yml file>
java-jar服务器


但是我仍然不知道如何将
命令的子类
服务器一起使用。

如果要在.yml文件中使用嵌套的键/值对,可以使用
映射:


1) --将自定义键/值对添加到.yml配置文件:

foobar: asdf
baz: 123
args:
  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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());

如果要在.yml文件中使用嵌套的键/值对,可以使用
映射


1) --将自定义键/值对添加到.yml配置文件:

foobar: asdf
baz: 123
args:
  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;
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());
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");
    }
}
System.out.println(configuration.getFoobar());
System.out.println(configuration.getBaz());