Как получить текущий хост и порт в микронавтом? - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь получить текущий хост и порт в приложении 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 ]

1 голос
/ 15 мая 2019

Есть несколько способов сделать это.Одним из них является получение их из 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;
    }
}
1 голос
/ 15 мая 2019

Исходный способ, которым вы пользовались, аналогичен извлечению его из environment. Вы просто пропустили $ в аннотации @Value.

@Value("${micronaut.server.host}") эквивалентно env.getProperty("micronaut.server.host", String.class)

Это будет извлекать все, что настроено. Если вместо этого вы хотите получить его со встроенного сервера, вы также можете это сделать, поскольку фактический порт может отличаться от настроенного порта. Это потому, что можно просто не настраивать порт или потому что настроенное значение равно -1, что указывает на случайный порт.

1 голос
/ 14 мая 2019

Моя ошибка.Как говорит @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");
   }
}
...