2014-05-05 12 views
12

Opublikowałem to pytanie na liście adresowej DW, ale nie otrzymałem odpowiedzi.Zastępowanie konfiguracji złącza serwera ze zmiennymi env za pomocą dropwizard

Czy mogę założyć, że poniższy format YML nie działa już dla DW 0.7.0? (Użycie @ char wstawić env var)

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

Błąd:

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]

Więc postanowiłem użyć tego formatu:

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

i starał się zastąpić go za pośrednictwem opcji JVM :

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

Moje lokalne en v zmienne:

OPENSHIFT_DIY_IP=localhost 
OPENSHIFT_DIY_PORT=8080 

Błąd dostałem od tej konfiguracji:

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

Co robię źle?

Odpowiedz

25

Począwszy od Dropwizard wersji 0.8.0, można uzyskać dostęp do zmiennych środowiskowych z pliku yml konfiguracja. Obsługuje również ustawienie wartości domyślnej, na wypadek gdyby zmienna środowiskowa nie była dostępna. See the docs here.

Przykład

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

Ważna uwaga: Aby to zadziałało trzeba założyć SubstitutingSourceProvider z EnvironmentVariableSubstitutor.

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

Aktualizacja: 15/listopad/2017 Jak wspomniano przez @EFreak w sekcji komentarzy, new EnvironmentVariableSubstitutor() rzuci UndefinedEnvironmentVariableException jeśli zmienna nie jest zdefiniowana, chyba że ustawisz tryb strict do false za pomocą new EnvironmentVariableSubstitutor(false) https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java

+3

@StephenNYC to powinna być teraz akceptowana odpowiedź, ponieważ jest wbudowana w dropwizard – davnicwil

+1

@Warfox, od dropwizard '1.1.4', aby uzyskać domyślne wartości do działania, musisz wyłączyć tryb ścisły za pomocą' new EnvironmentVa riableSubstitutor (false) '. Inaczej wyrzuci to 'UndefinedEnvironmentVariableException' src: https://github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java – EFreak

+0

thanks @EFreak, I zaktualizowałem moją odpowiedź – WarFox

Powiązane problemy