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?
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
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.
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();
}
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?
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
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);
}
}
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.
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