使用dropwizard覆盖带有env变量的服务器连接器配置

我已经在dw邮件列表上发布了这个问题,但没有得到答案。

我可以假设下面的YML格式不再适用于DW 0.7.0吗? (使用@ char插入env var)

server: applicationConnectors: - type: http bindHost: @OPENSHIFT_DIY_IP@ port: @OPENSHIFT_DIY_PORT@ 

错误:

格式错误的YAML在第28行,第17列; 扫描下一个标记时; 找到无法启动任何令牌的字符@’@’。 (不要使用@代替缩进); 在’reader’,第28行,第17列:bindHost:@ OPENSHIFT_DIY_IP @

所以我决定使用这种格式:

 server: type: simple applicationContextPath: / adminContextPath: /admin connector: type: http bindHost: localhost port: 8080 

并尝试通过jvm选项覆盖它:

 java -Ddw.server.connector.bindHost=$OPENSHIFT_DIY_IP -Ddw.server.connector.port=$OPENSHIFT_DIY_PORT -jar target/myapp.jar server myapp.yml 

我的本地env变量:

 OPENSHIFT_DIY_IP=localhost OPENSHIFT_DIY_PORT=8080 

我从这个设置得到的错误:

线程“main”中的exceptionjava.lang.RuntimeException:java.net.SocketException:org.eclipse.jetty.setuid.SetUIDListener.lifeCycleStarting(SetUIDListener.java:213)中未解析的地址…引起:java.net.SocketException :sun.nio.ch.Net.translateToSocketException(Net.java:157)中未解析的地址… WARN [2014-05-03 20:11:19,412] org.eclipse.jetty.util.component.AbstractLifeCycle:FAILED org .eclipse.jetty.server.Server @ 91b85:java.lang.RuntimeException:java.net.SocketException:未解析的地址

我究竟做错了什么?

从Dropwizard版本0.8.0开始 ,您可以从配置yml文件中访问环境变量。 它还支持在环境变量不可用时设置默认值。 请参阅此处的文档。

 // put environment variable inside ${} // use :- operator to provide default value dbHost: ${DB_HOST} dbPort: ${DB_PORT:-1234} // dbPort = 1234, if DB_PORT environment variable has no value 

重要说明 :为此,您需要使用EnvironmentVariableSubstitutor设置SubstitutingSourceProvider

 // Enable variable substitution with environment variables bootstrap.setConfigurationSourceProvider( new SubstitutingSourceProvider( bootstrap.getConfigurationSourceProvider(), new EnvironmentVariableSubstitutor()) ); 

更新 :2017年11月15日正如@EFreak在评论部分中所提到的,如果UndefinedEnvironmentVariableException环境变量, new EnvironmentVariableSubstitutor()将抛出UndefinedEnvironmentVariableException ,除非您使用new EnvironmentVariableSubstitutor(false) https://将strict mode设置为false github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java

有人为DW创建了一个包 ,可以嵌入env变种