java - Cambiar los puertos predeterminados de Dropwizard
rest jersey (8)
Desde la línea de comandos, puede configurarlos de esta manera, en Dropwizard 0.6:
java -Ddw.http.port=9090 -Ddw.http.adminPort=9091 -jar yourapp.jar server yourconfig.yml
Si usa Dropwizard 0.7, las propiedades del sistema se establecen de esta manera:
java -Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 -jar yourapp.jar server yourconfig.yml
Parece que, si configura puertos a través de las propiedades del sistema, también debe configurarlos en el yml (la propiedad del sistema tiene prioridad, de todos modos). Al menos eso me está pasando en Dropwizard 0.7. Ejemplo de la configuración del puerto YAML:
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
Si no coloca esos puertos en el YAML, Dropwizard se queja:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to override server.applicationConnectors[0].port; node with index not found.
Tengo un servicio Jersey REST basado en Dropwizard que se ejecuta en los puertos predeterminados 8080 (servicio) y 8081 (administrador), necesito cambiar los puertos predeterminados a algo que se usa con menos frecuencia, no puedo encontrar ninguna información para hacerlo, ¿Alguien puede indicarme que lo haga?
Esto es lo que he hecho para mis aplicaciones de prueba (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 da un puerto aleatorio que está disponible.
Sé que no es bonito, pero no pude encontrar una mejor manera de hacerlo programáticamente. Necesitaba asegurarme de que los puertos no chocaran entre diferentes pruebas de integración, porque se ejecutan en paralelo. Crear un archivo yml al azar para cada prueba hubiera sido más feo, creo.
Ah, y así es como obtiene el puerto de ejecución más adelante:
@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();
}
Necesitaba configurar los puertos pero no pude configurarlos desde la línea de comando. Terminé con esta solución:
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);
}
Esto se hace usando Dropwizard 1.3.0-rc7
Nunca antes he trabajado con Dropwizard, solo creo servicios simples usando jersey. Decidí ver el manual del usuario e inmediatamente encontré una descripción de la configuración.
Dropwizard manual de configuración
Puede anular la configuración al pasar propiedades especiales del sistema Java al iniciar su servicio. Las modificaciones deben comenzar con el prefijo dw., Seguido de la ruta al valor de configuración que se reemplaza. Por ejemplo, para anular el puerto HTTP que se utilizará, puede comenzar su servicio de la siguiente manera:
java -Ddw.http.port=9090 server my-config.json
Es adecuado para ti?
Para Dropwizard 0.6.2 puede cambiar el puerto programáticamente de la siguiente manera en su clase de servicio.
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);
}
}
Para Dropwizard 0.8.0 -
Su archivo YAML puede ser -
server: type: simple connector: type: http port: 80
Si desea cambiar los puertos de la línea de comandos,
java -Ddw.server.connector.port=9090 -jar yourapp.jar server yourconfig.yml
El comando solo funcionará si tiene la entrada en el archivo YAML. DW necesita un valor predeterminado que puede anular.
Puede actualizar los puertos en su archivo de configuración yaml:
http:
port: 9000
adminPort: 9001
Consulte http://www.dropwizard.io/0.9.2/docs/manual/configuration.html#http para obtener más información.
EDITAR
Si ha migrado a Dropwizard 0.7.x, 0.8.x, 0.9.x, puede usar lo siguiente:
server:
applicationConnectors:
- type: http
port: 9000
adminConnectors:
- type: http
port: 9001
Si desea que se modifique en el uso en tiempo de ejecución
-Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091
Lo he usado con la versión 1.0.5