Changement Dropwizard ports par défaut
-
21-12-2019 - |
Question
J'ai un Dropwizard basée Maillot de service de REPOS en cours d'exécution sur les ports par défaut 8080(service) et 8081(admin), j'ai besoin de changer les ports par défaut pour quelque chose qui est moins couramment utilisé, je ne suis pas en mesure de trouver toute l'information pour ce faire , quelqu'un peut-il svp m'indiquer le faire ?
La solution
Vous pouvez mettre à jour les ports de votre fichier de configuration YAML:
http:
port: 9000
adminPort: 9001
voir http://www.dropwizard.io/0.9.2/docs/Manuel / Configuration.html # http pour plus d'informations.
Si vous avez migré vers Dropwizard 0.7.x, 0,8.x, 0,9.x, vous pouvez utiliser ce qui suit:
server:
applicationConnectors:
- type: http
port: 9000
adminConnectors:
- type: http
port: 9001
Autres conseils
de la ligne de commande, vous pouvez les définir de cette façon, dans Dropwizard 0.6:
java -Ddw.http.port=9090 -Ddw.http.adminPort=9091 -jar yourapp.jar server yourconfig.yml
Si vous utilisez Dropwizard 0.7, les propriétés du système sont définies de cette façon:
java -Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 -jar yourapp.jar server yourconfig.yml
Je semble que si vous configurez des ports via les propriétés du système, vous devez également les définir dans le YML (la propriété système prend sa priorité, de toute façon).Au moins cela me arrive dans Dropwizard 0.7.Exemple de la configuration du port YAML:
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
Si vous ne mettez pas ces ports dans l'YAML, Dropwizard se plaint:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to override server.applicationConnectors[0].port; node with index not found.
C'est ce que j'ai fait pour mes applications de test (0,7.x, 0,8.x, 0,9.x):
public class TestConfiguration extends Configuration {
public TestConfiguration() {
super();
// The following is to make sure it runs with a random port. parallel tests clash otherwise
((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getApplicationConnectors().get(0)).setPort(0);
// this is for admin port
((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getAdminConnectors().get(0)).setPort(0); } }
0 donne un port aléatoire disponible.
Je sais que ce n'est pas joli mais je n'ai pas trouvé de meilleure façon de le faire par programme.Je devais veiller à ce que les ports ne se heurtent pas entre des tests d'intégration différents, car ils fonctionnent en parallèle.Création d'un fichier YML au hasard pour chaque test aurait été plus actionné, je crois.
Oh et c'est ainsi que vous obtenez le port de course plus tard sur:
@Override
public void run(TestConfiguration configuration, Environment environment) throws Exception {
this.environment = environment;
// do other stuff if you need to
}
public int getPort() {
return ((AbstractNetworkConnector) environment.getApplicationContext().getServer().getConnectors()[0]).getLocalPort();
}
Je ne travaille jamais avec Dropwizard avant, créant uniquement des services simples utilisant Jersey.J'ai décidé de voir le manuel de l'utilisateur et j'ai immédiatement trouvé une description des paramètres.
Manuel de configuration Dropwizard
Vous pouvez remplacer les paramètres de configuration en passant des propriétés spéciales du système Java lors du démarrage de votre service.Les substituts doivent commencer avec préfixe DW., Suivi du chemin de la valeur de la configuration étant remplacé. Par exemple, pour remplacer le port HTTP à utiliser, vous pouvez démarrer votre service comme celui-ci:
java -Ddw.http.port=9090 server my-config.json
Est-ce qu'il vous convient?
Si vous voulez que cela soit changé à l'utilisation de l'exécution
-Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091
Je l'ai utilisé avec la version 1.0.5
pour Dropwizard 0.6.2 Vous pouvez modifier le port programmatiquement comme ci-dessous dans votre classe de service.
import com.yammer.dropwizard.config.Configuration;
import com.yammer.dropwizard.config.Bootstrap;
import com.yammer.dropwizard.config.Environment;
import com.yammer.dropwizard.config.HttpConfiguration;
import com.yammer.dropwizard.Service;
public class BlogService extends Service<Configuration> {
public static void main(String[] args) throws Exception {
new BlogService().run(new String[] {"server"});
}
@Override
public void initialize(Bootstrap<Configuration> bootsrap) {
bootsrap.setName("blog");
}
public void run(Configuration configuration, Environment environment) throws Exception {
HttpConfiguration config = new HttpConfiguration();
config.setPort(8085);
config.setAdminPort(8086);
configuration.setHttpConfiguration(config);
}
}
J'avais besoin de définir les ports mais je n'arrivais pas à les définir à partir de la ligne de commande.J'ai fini avec cette solution:
public static void main(String[] args) throws Exception {
String applicationPort = "9090";
String adminPort = "9091";
System.setProperty("dw.server.applicationConnectors[0].port", applicationPort);
System.setProperty("dw.server.adminConnectors[0].port", adminPort);
new Main().run(args);
}
Ceci est fait en utilisant Dropwizard 1.3.0-rc7
pour Dropwizard 0.8.0 -
Votre fichier YAML peut être -
server: type: simple connector: type: http port: 80
Si vous souhaitez modifier les ports de la ligne de commande,
java -Ddw.server.connector.port=9090 -jar yourapp.jar server yourconfig.yml
La commande ne fonctionnera que si vous avez l'entrée dans le fichier YAML.DW a besoin d'une valeur par défaut qu'elle peut remplacer.