7

問題は、ポート番号がどのように定義されていても (構成、コマンドライン引数、またはまったくない)、play がリッスンしているポート番号を取得するにはどうすればよいかということです。

Play Framework を使用してアプリケーション内でポート番号を取得するこの回答は、そのコードがコンパイルされないため、Play v1 用である必要があります。

Play 2 Java には次のものがあります。

Integer port = Play.application().configuration().getInt("http.port");

少なくともすべての場合ではなく、実際のポート番号を返すわけではありません。Play が次のように実行されている場合:

run 80 -Dhttp.address=example.com

その後、 を返しますnull

Playが次のように実行されている場合

run -Dhttp.port 80 -Dhttp.address=example.com

次に、デフォルトのポート (9000) で Play が開始されます。

biesior が指摘したように、ポートを 2 回言及することで機能します。

play -Dhttp.port=80 "run 80"

1 つは Play が実際に使用するものであり、もう 1 つは Play が報告するものであるため、もちろん最適ではありません。

しかし、開発モードに関する私の質問には答えます。ただし、ドキュメントにあるように、Play はrunin prod を使用して実行しないでください。では、コマンドに相当するものは何startですか?また、より安全で優れた方法はありませんか? (私は Java バージョンに興味がありますが、他の人は Scala についても知りたいと思うかもしれません。)

4

4 に答える 4

3

開発モードで実行するには、二重表記を使用する必要があります

play -Dhttp.port=80 "run 80"

残念ながら、デフォルトのポートについても同じことをする必要があります

play -Dhttp.port=9000 "run 9000"

したがって、必要なすべてのパラメーターを簡単に開始できるように、シェル スクリプト (Windows では .bat) を作成することをお勧めします。

于 2013-02-20T05:52:17.147 に答える
0

ポートの指定方法に関係なく、ポートを取得する方法を見つけました。逆ルートを使用して Call オブジェクトを取得し、absoluteUrl() メソッドを使用して、ポートを含むアクションの絶対 URL を取得します。コードスニペット:

public class RouteController extends Controller {
public  Promise<Result> getPortAction() {
    Call call = com.mycom.routes.RouteController.getPortAction();
    String absoluteUrl = call.absoluteURL(request());
    //Here absoluteUrl would be like http://localhost:9002/...., 9002 would be the port.
    ...
} }
于 2015-03-02T06:03:18.160 に答える