、DefaultServerFactory#ビルドを参照してください。何をする必要がある独自のServerFactoryを実装
@Override
public Server build(Environment environment) {
printBanner(environment.getName());
final ThreadPool threadPool = createThreadPool(environment.metrics());
final Server server = buildServer(environment.lifecycle(), threadPool);
LOGGER.info("Registering jersey handler with root path prefix: {}", applicationContextPath);
environment.getApplicationContext().setContextPath(applicationContextPath);
final Handler applicationHandler = createAppServlet(server,
environment.jersey(),
environment.getObjectMapper(),
environment.getValidator(),
environment.getApplicationContext(),
environment.getJerseyServletContainer(),
environment.metrics());
LOGGER.info("Registering admin handler with root path prefix: {}", adminContextPath);
environment.getAdminContext().setContextPath(adminContextPath);
final Handler adminHandler = createAdminServlet(server,
environment.getAdminContext(),
environment.metrics(),
environment.healthChecks());
final RoutingHandler routingHandler = buildRoutingHandler(environment.metrics(),
server,
applicationHandler,
adminHandler);
server.setHandler(addStatsHandler(addRequestLog(server, routingHandler, environment.getName())));
return server;
}
です。
DefaultServerFactoryを拡張し、ビルドメソッドを上書きして、必要な方法でコネクタを設定できます。 おそらく、どこに行くのかを示す設定をいくつか追加したいと思うでしょう。あなたのyamlに関して、特定のコネクタにリソースをマップすることはできないからです。 dropwizardはどうしたらそれについて知っているだろうか? dropwizardの動作を上書きするために
(新しいServerFactoryを追加する)あなたはこの記事を参照することができ、私はログを追加する方法について書きました:Dropwizard doesn't log custom loggers to file
それは基本的にクラスを実装し、dropwizardのため、それは発見することが含まれます。その後、正しいServerFactoryを指すようにyamlファイルを変更するだけです。
この方法が嫌いなら、設定のget/setメソッドを上書きしてクラスを返すことができます。このため、あなたのクラスはDefaultServerFactoryを拡張しなければなりません。さもなければ、yamlマッピングはもはや動作しません。ただし、ビルドメソッドは、それにかかわらず上書きすることができます。
更新:
は、もう少し詳細にそれを見て、あなたは第二の問題に遭遇します:
あなたの環境は、それが使用できる1つのジャージ環境を持っています。 現在、デフォルトでは、各ハンドラには同じJersey設定が渡される(存在する唯一のもの)ため、2番目のジャージ環境を設定する必要があります。これが、すべてのhttp設定で利用できるようになる理由です。要約中のSO:
- はジャージの設定が属するかを知っているサーバーの工場を作成し、複数のジャージ構成
- をサポートする新しい環境を作成したハンドラーとそのフォーム内のハンドラをインスタンス化します。
私はこれらの2つのステップが必要と考えています。
環境面では、独自のServerCommand(dropwizardサーバーを起動するコマンド)を作成する必要があります。 EnvironmentCommand#を見ると、環境の作成場所を確認できます。これは、私が知っている限り、デフォルトの環境を上書きすることができる唯一の場所で、複数のジャーナル設定をサポートするために必要なものです。
あなたに正直言って、これを見ると、私はこれがドロップワイザーの男が心に持っていたものだとは思わない。
私は興味があります - 別のポートで各リソースを実行する理由は何ですか? –
私は同じ必要があります。問題はセキュリティです。一部のサービスは外部に公開する必要があり、一部はサブネットのみに公開する必要があります。すべてのプライベートサービスを別のポートに置き、ファイアウォール内のそのポートへのアクセスをブロックすると、あなたはうまくいきます。 – ccleve