2014-05-05 2 views
12

Ich habe diese Frage auf der dw Mailing-Liste geschrieben, aber nicht eine Antwort bekommen.Überschreiben Server Connector Config mit env Variablen mit Dropwizard

Kann ich davon ausgehen, dass das folgende YML-Format nicht mehr für DW 0.7.0 funktioniert? (Die Verwendung von @ char einzufügen env var)

server: 
    applicationConnectors: 
    - type: http 
     bindHost: @[email protected] 
     port: @[email protected] 

Fehler:

Malformed YAML at line: 28, column: 17; while scanning for the next token; found character @ '@' that cannot start any token. (Do not use @ for indentation); in 'reader', line 28, column 17: bindHost: @[email protected]

Also habe ich beschlossen, dieses Format zu verwenden:

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

und versuchte es über JVM-Optionen außer Kraft setzen :

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

Mein lokaler en v Variablen:

OPENSHIFT_DIY_IP=localhost 
OPENSHIFT_DIY_PORT=8080 

Der Fehler, den ich von diesem Setup bekam:

Exception in thread "main" java.lang.RuntimeException: java.net.SocketException: Unresolved address at org.eclipse.jetty.setuid.SetUIDListener.lifeCycleStarting(SetUIDListener.java:213) ... Caused by: java.net.SocketException: Unresolved address at sun.nio.ch.Net.translateToSocketException(Net.java:157) ... WARN [2014-05-03 20:11:19,412] org.eclipse.jetty.util.component.AbstractLifeCycle: FAILED [email protected]: java.lang.RuntimeException: java.net.SocketException: Unresolved address

Was mache ich falsch?

Antwort

25

ab Dropwizard Version 0.8.0 Sie Umgebungsvariablen aus der Konfiguration yml Datei zugreifen können. Es unterstützt auch das Setzen eines Standardwertes für den Fall, dass die Umgebungsvariable nicht verfügbar ist. See the docs here.

Beispiel

// 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 

Wichtiger Hinweis: Dazu geben Sie eine SubstitutingSourceProvider mit einem EnvironmentVariableSubstitutor einrichten müssen arbeiten.

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

aktualisieren: 15/Nov/2017 Wie in den Kommentaren von @EFreak erwähnt, new EnvironmentVariableSubstitutor()UndefinedEnvironmentVariableException werfen, wenn die Umgebungsvariable nicht definiert ist, es sei denn, Sie strict Modus false gesetzt durch new EnvironmentVariableSubstitutor(false) mit https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java

+3

@StephenNYC Dies sollte die akzeptierte Antwort jetzt sein, wie es in Dropwizard – davnicwil

+1

@Warfox, wie von Dropwizard '1.1.4' eingebaut ist, um Standardwerte zu arbeiten, müssen Sie strikten Modus mit' neuen deaktivieren UmweltVa riableSubstitutitor (falsch) '. Sonst wird es 'UndefinedEnvironmentVariableException' src werfen: https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutitor.java – EFreak

+0

danke @EFreak, ich habe meine Antwort aktualisiert – WarFox

Verwandte Themen