如何在micronaut中获得当前的主机和端口?

时间:2019-05-14 13:02:54

标签: java micronaut

我正在尝试在micronaut应用程序中获取当前的主机和端口。如何以动态方式获取它?

我已经尝试过@Value(“ {micronaut.server.host}”)和@Value(“ {micronaut.server.port}”),但没有用。

@Controller("/some/endpoint")
class SomeController {
    @Value("{micronaut.server.host}")
    protected String host;

    @Value("{micronaut.server.port}")
    protected Long port;
}

3 个答案:

答案 0 :(得分:1)

我的错误。正如@JaredWare所说,我们应该使用Environment来检索应用程序的属性。

@Controller("/some/endpoint")
class SomeController {
   @Inject
   protected Environment env;

   @Get
   public String someMethod () {
       Optional<String> host = this.env.getProperty("micronaut.server.host", String.class);
       return host.orElse("defaultHost");
   }
}

答案 1 :(得分:1)

有很多方法可以做到这一点。一种是从EmbeddedServer中检索它们。

import io.micronaut.http.HttpStatus;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.runtime.server.EmbeddedServer;

@Controller("/demo")
public class DemoController {

    protected final String host;

    protected final int port;

    public DemoController(EmbeddedServer embeddedServer) {
        host = embeddedServer.getHost();
        port = embeddedServer.getPort();
    }

    @Get("/")
    public HttpStatus index() {
        return HttpStatus.OK;
    }
}

答案 2 :(得分:1)

您拥有它的原始方式与从environment检索它的方式相同。您只是在$批注中丢失了@Value

@Value("${micronaut.server.host}")等效于env.getProperty("micronaut.server.host", String.class)

这将检索配置的任何内容。相反,如果您想从嵌入式服务器本身检索它,则也可以这样做,因为实际端口可能与配置的端口不同。这是因为可以简单地不配置端口,或者因为配置的值为-1(表示随机端口)。