DropwizardベースのJersey RESTサービスはデフォルトポート8080(service)および8081(admin)で実行されていますが、デフォルトポートをあまり一般的ではないものに変更する必要があります。そうするための情報を見つけることができますが、誰かがそうするように私を指すことができますか?
Yaml設定ファイルのポートを更新できます:
http:
port: 9000
adminPort: 9001
詳細については、 http://www.dropwizard.io/0.9.2/docs/manual/configuration.html#http を参照してください。
[〜#〜] edit [〜#〜]
Dropwizard 0.7.x、0.8.x、0.9.xに移行した場合は、次を使用できます。
server:
applicationConnectors:
- type: http
port: 9000
adminConnectors:
- type: http
port: 9001
Dropwizard 0.6では、コマンドラインから次のように設定できます。
Java -Ddw.http.port=9090 -Ddw.http.adminPort=9091 -jar yourapp.jar server yourconfig.yml
Dropwizard 0.7を使用する場合、システムプロパティは次のように設定されます。
Java -Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 -jar yourapp.jar server yourconfig.yml
システムプロパティを使用してポートを構成する場合、ymlでポートを設定する必要もあるようです(とにかく、システムプロパティが優先されます)。少なくとも、Dropwizard 0.7ではこれが起こっています。 YAMLポート設定の例:
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
これらのポートをYAMLに入れないと、Dropwizardは次のように文句を言います。
Exception in thread "main" Java.lang.IllegalArgumentException: Unable to override server.applicationConnectors[0].port; node with index not found.
これは、テストアプリケーション(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は、使用可能なランダムポートを提供します。
私はそれがきれいではないことを知っていますが、プログラムでそれを行うより良い方法を見つけることができませんでした。ポートが並行して実行されるため、ポートが異なる統合テスト間で衝突しないことを確認する必要がありました。テストごとにランダムにymlファイルを作成することは、私にとってはugいことでした。
ああ、これは後で実行中のポートを取得する方法です:
@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();
}
以前はdropwizardを使用したことがなく、ジャージを使用して簡単なサービスを作成していました。私はユーザーズマニュアルを見ることにし、すぐに設定の説明を見つけました。
サービスの開始時に特別なJavaシステムプロパティを渡すことにより、構成設定をオーバーライドできます。オーバーライドは、プレフィックスdw。で始まり、その後にオーバーライドされる構成値へのパスが続く必要があります。使用するHTTPポートは、次のようにサービスを開始できます。
Java -Ddw.http.port=9090 server my-config.json
あなたに適していますか?
実行時に変更したい場合
-Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091
バージョン1.0.5で使用しました
Dropwizard 0.6.2の場合、サービスクラスで以下のようにプログラムでポートを変更できます。
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);
}
}
Dropwizard 0.8.0の場合-
あなたのYAMLファイルは-
server: type: simple connector: type: http port: 80
コマンドラインからポートを変更する場合は、
Java -Ddw.server.connector.port=9090 -jar yourapp.jar server yourconfig.yml
コマンドは、YAMLファイルにエントリがある場合にのみ機能します。 DWには、オーバーライド可能なデフォルト値が必要です。
ポートを設定する必要がありましたが、コマンドラインから設定できませんでした。私はこの解決策になりました:
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);
}
これは、Dropwizard 1.3.0-rc7