Remplacement de la configuration du connecteur de serveur avec des variables env avec dropwizard

J’ai posté cette question sur la liste de diffusion dw mais je n’ai pas eu de réponse.

Puis-je supposer que le format YML ci-dessous ne fonctionne plus pour DW 0.7.0? (Utilisation de @ char pour insérer env var)

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

Erreur:

YAML malformé à la ligne: 28, colonne: 17; lors de la recherche du prochain jeton; caractère trouvé @ ‘@’ qui ne peut démarrer aucun jeton. (N’utilisez pas @ pour l’indentation); dans ‘lecteur’, ligne 28, colonne 17: bindHost: @ OPENSHIFT_DIY_IP @

J’ai donc décidé d’utiliser ce format:

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

Et essayé de le remplacer via les options JVM:

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

Mes variables env locales:

 OPENSHIFT_DIY_IP=localhost OPENSHIFT_DIY_PORT=8080 

L’erreur que j’ai eu de cette configuration:

Exception dans le fil “main” java.lang.RuntimeException: java.net.SocketException: adresse non résolue à l’adresse org.eclipse.jetty.setuid.SetUIDListener.lifeCycleStarting (SetUIDListener.java:213) … Causé par: java.net.SocketException : Adresse non résolue sur 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: adresse non résolue

Qu’est-ce que je fais mal?

À partir de Dropwizard version 0.8.0 , vous pouvez accéder aux variables d’environnement à partir du fichier de configuration yml. Il prend également en charge la définition d’une valeur par défaut dans le cas où la variable d’environnement n’est pas disponible. Voir la documentation ici.

Exemple

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

Remarque importante : pour que cela fonctionne, vous devez configurer un SubstitutingSourceProvider avec un EnvironmentVariableSubstitutor .

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

Mise à jour : 15 / Nov / 2017 Comme mentionné par @EFreak dans la section commentaires, new EnvironmentVariableSubstitutor() lève UndefinedEnvironmentVariableException si la variable d’environnement n’est pas définie, sauf si vous définissez ssortingct mode ssortingct sur false à l’aide de la new EnvironmentVariableSubstitutor(false) https: // github.com/dropwizard/dropwizard/blob/master/dropwizard-configuration/src/main/java/io/dropwizard/configuration/EnvironmentVariableSubstitutor.java

quelqu’un a créé un paquet pour que DW puisse intégrer env vars