wake-up-neo.com

Dropwizard-Standardports ändern

Ich habe einen Dropwizard-basierten Jersey REST - Dienst, der auf den Standardports 8080 (Service) und 8081 (Admin) ausgeführt wird. Ich muss die Standardports in etwas ändern, das weniger häufig verwendet wird. Ich kann keine Informationen finden Kann mir jemand bitte darauf hinweisen?

40
user1965449

Sie können die Ports in Ihrer yaml-Konfigurationsdatei aktualisieren:

http:
  port: 9000
  adminPort: 9001

Weitere Informationen finden Sie unter http://www.dropwizard.io/0.9.2/docs/manual/configuration.html#http .

EDIT

Wenn Sie zu Dropwizard 0.7.x, 0.8.x, 0.9.x migriert haben, können Sie Folgendes verwenden:

server:
  applicationConnectors:
  - type: http 
    port: 9000
  adminConnectors:
  - type: http
    port: 9001
82
condit

In der Befehlszeile können Sie sie in Dropwizard 0.6 so einstellen:

Java -Ddw.http.port=9090 -Ddw.http.adminPort=9091 -jar yourapp.jar server yourconfig.yml

Wenn Sie Dropwizard 0.7 verwenden, werden die Systemeigenschaften folgendermaßen festgelegt:

Java -Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 -jar yourapp.jar server yourconfig.yml

Ich glaube, wenn Sie Ports über Systemeigenschaften konfigurieren, müssen Sie sie auch in yml festlegen (die Systemeigenschaft hat sowieso Vorrang). Zumindest passiert mir das in Dropwizard 0.7. Beispiel für die YAML-Portkonfiguration:

server:
  applicationConnectors:
  - type: http
    port: 8090
  adminConnectors:
  - type: http
    port: 8091

Wenn Sie diese Ports nicht in die YAML einfügen, beschwert sich Dropwizard:

Exception in thread "main" Java.lang.IllegalArgumentException: Unable to override server.applicationConnectors[0].port; node with index not found.
29
Ferran Maylinch

Das habe ich für meine Testanwendungen gemacht (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 gibt einen zufälligen Port an, der verfügbar ist.

Ich weiß, dass es nicht hübsch ist, aber ich könnte keinen besseren Weg finden, um es programmgesteuert durchzuführen. Ich musste sicherstellen, dass die Ports nicht zwischen verschiedenen Integrationstests kollidieren, da sie parallel laufen. Das Erstellen einer zufälligen Yml-Datei für jeden Test wäre meiner Meinung nach hässlicher gewesen.

Oh, und so bekommst du später den laufenden Port:

@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();
  }
12
Natan

Ich arbeite noch nie mit dropwizard und erstelle einfache Dienstleistungen mit Jersey. Ich entschied mich für die Bedienungsanleitung und fand sofort eine Beschreibung der Einstellungen.

Dropwizard Konfigurationsanleitung

Sie können Konfigurationseinstellungen überschreiben, indem Sie beim Starten Ihres Dienstes spezielle Java-Systemeigenschaften übergeben. Überschreibungen müssen mit dem Präfix dw. Beginnen, gefolgt vom Pfad zum Konfigurationswert, der überschrieben wird . Um beispielsweise den zu verwendenden HTTP-Port zu überschreiben, können Sie Ihren Dienst folgendermaßen starten:

Java -Ddw.http.port=9090 server my-config.json

Ist es für dich geeignet?

5
Mark

Wenn Sie möchten, dass es zur Laufzeit geändert wird, verwenden Sie

-Ddw.server.applicationConnectors[0].port=9090  -Ddw.server.adminConnectors[0].port=9091

Ich habe es mit Version 1.0.5 verwendet

2
Vikash Tiwari

Für Dropwizard 0.6.2 können Sie den Port wie folgt programmgesteuert in Ihrer Serviceklasse ändern.

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);
}

}
1
Prasad Revanaki

Für Dropwizard 0.8.0 -

Ihre YAML-Datei kann - 

server:
    type: simple
    connector:
      type: http
      port: 80

Wenn Sie die Ports von der Befehlszeile aus ändern möchten, 

Java -Ddw.server.connector.port=9090 -jar yourapp.jar server yourconfig.yml

Der Befehl funktioniert nur, wenn Sie den Eintrag in der YAML-Datei haben. DW benötigt einen Standardwert, den es überschreiben kann.

1
Jay Khatwani

Ich musste die Ports einstellen, konnte sie aber nicht von der Kommandozeile aus einstellen. Ich endete mit dieser Lösung:

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);
}

Dies geschieht mit Dropwizard 1.3.0-rc7

0
Thomas Sundberg