【问题标题】:How to get current host and port in micronaut?如何在 micronaut 中获取当前主机和端口?
【发布时间】:2019-05-14 13:02:53
【问题描述】:

我正在尝试在 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;
}

【问题讨论】:

  • 我已经有一段时间没有使用该服务了,但是您可以尝试一下:protected String host = environment.getProperty("micronaut.server.host", String.class); protected Long port= environment.getProperty("micronaut.server.port", Long.class);
  • 有效!谢谢你。我现在看到了。所以@Value 只用于获取我们在 application.yml 中指定的配置值?
  • 我很高兴它成功了@below-1
  • 据我所知@Value 有很多用途,但 Micronaut 建议通过环境获取端口和服务器主机值

标签: java micronaut


【解决方案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;
    }
}

【讨论】:

  • 嗯,它看起来更干净。谢谢
  • 不同的方法有一些优点和缺点,其中一些不是什么大问题。对我来说,如果我真正想知道的是“服务器运行在什么主机和端口上?”,这感觉有点对。而不是“micronaut.server.hostmicronaut.server.port 配置设置的值是多少?”。如果我想知道服务器在哪个端口上运行,询问服务器似乎是有道理的。去配置设置也很好。
【解决方案2】:

我的错。正如@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");
   }
}

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2014-10-02
      • 2011-07-02
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多