web-dev-qa-db-ja.com

dropwizardを使用して環境変数でサーバーコネクタ構成をオーバーライドする

この質問をd​​wメーリングリストに投稿しましたが、回答がありませんでした。

以下のYML形式がDW0.7.0で機能しなくなったと想定できますか? (環境変数を挿入するための@charの使用)

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

エラー:

行:28、列:17の不正なY​​AML。次のトークンをスキャンしている間。トークンを開始できない文字@ '@'が見つかりました。 (インデントに@を使用しないでください); '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

私のローカル環境変数:

OPENSHIFT_DIY_IP=localhost
OPENSHIFT_DIY_PORT=8080

この設定で発生したエラー:

スレッド「メイン」の例外Java.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)の未解決のアドレス...警告[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:未解決のアドレス

私は何が間違っているのですか?

19
StephenNYC

誰かがDWがenv変数を埋め込むことができるように バンドル を作成しました

6
StephenNYC

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
_

重要な注意:これを機能させるには、SubstitutingSourceProviderEnvironmentVariableSubstitutorを設定する必要があります。

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

Update:15/Nov/2017コメントセクションの@EFreakで述べたように、new EnvironmentVariableSubstitutor()UndefinedEnvironmentVariableExceptionをスローします環境変数が定義されていない場合、new EnvironmentVariableSubstitutor(false)https://github.com/dropwizard/dropwizard/を使用してstrictモードをfalseに設定しない限り、 blob/master/dropwizard-configuration/src/main/Java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.Java

42
WarFox