我已经在dw邮件列表上发布了这个问题,但没有得到答案。
我可以假设下面的YML格式不再适用于DW 0.7.0吗? (使用@ char插入env var)
server:
applicationConnectors:
- type: http
bindHost: @OPENSHIFT_DIY_IP@
port: @OPENSHIFT_DIY_PORT@
错误:
格式错误的YAML在第28行,第17列;扫描下一个标记时;找到无法启动任何令牌的字符@'@'。 (不要使用@代替缩进);在'读者',第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
我的本地环境变量:
OPENSHIFT_DIY_IP=localhost
OPENSHIFT_DIY_PORT=8080
我从这个设置中得到的错误:
线程“main”中的异常java.lang.RuntimeException:java.net.SocketException:未解析的地址 at org.eclipse.jetty.setuid.SetUIDListener.lifeCycleStarting(SetUIDListener.java:213) ... 引起:java.net.SocketException:未解析的地址 at 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:未解决的地址
我做错了什么?
答案 0 :(得分:38)
从Dropwizard版本 0.8.0 开始,您可以从配置yml文件访问环境变量。它还支持在环境变量不可用时设置默认值。 See the docs here.
示例强>
// 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
重要提示:为此,您需要设置SubstitutingSourceProvider
EnvironmentVariableSubstitutor
。
// Enable variable substitution with environment variables
bootstrap.setConfigurationSourceProvider(
new SubstitutingSourceProvider(
bootstrap.getConfigurationSourceProvider(),
new EnvironmentVariableSubstitutor())
);
更新:2017年11月15日
正如@EFreak在评论部分中所提到的,如果未定义环境变量,new EnvironmentVariableSubstitutor()
将抛出UndefinedEnvironmentVariableException
,除非您使用{{1将strict
模式设置为false
}}
https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java
答案 1 :(得分:5)
有人为DW创建了bundle以便能够嵌入env vars